Android copiar / pegar desde el gestor de portapapeles

¿Es posible enviar comando pasado para que pegue texto en el texto de edición actualmente enfocado. Guión:

  1. Servicio en segundo plano que escucha para la notificación (hecho)
  2. Cuando se recibe la notificación, el texto debe copiarse en el portapapeles (hecho)
  3. Pegue texto a cualquier campo actualmente enfocado, si no es posible, descarte el comando paste.

Sé cómo copiar el texto con ClipboardManager , pero no sé cómo pegarlo.

Puede copiar y pegar texto utilizando código siguiente …

 //for copy ClipboardManager clipboard = (ClipboardManager)getSystemService(Context.CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText("your_text_to_be_copied"); clipboard.setPrimaryClip(clip); // And paste it ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); String pasteData = ""; // If it does contain data, decide if you can handle the data. if (!(clipboard.hasPrimaryClip())) { } else if (!(clipboard.getPrimaryClipDescription().hasMimeType(MIMETYPE_TEXT_PLAIN))) { // since the clipboard has data but it is not plain text } else { //since the clipboard contains plain text. ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0); // Gets the clipboard as text. pasteData = item.getText().toString(); } } 

Para más detalles ver aquí

Un breve resumen de arriba después de nido de abeja> = API 13:

 public String readFromClipboard() { ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); if (clipboard.hasPrimaryClip()) { android.content.ClipDescription description = clipboard.getPrimaryClipDescription(); android.content.ClipData data = clipboard.getPrimaryClip(); if (data != null && description != null && description.hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) return String.valueOf(data.getItemAt(0).getText()); } return null; } 

Lo hago de esta manera. Administrador de Portapapeles para todos los niveles de api.

 import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; import android.annotation.SuppressLint; import android.content.ClipData; import android.content.ClipboardManager; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.res.AssetFileDescriptor; import android.net.Uri; import android.util.Log; public class MyClipboardManager { @SuppressLint("NewApi") @SuppressWarnings("deprecation") public boolean copyToClipboard(Context context, String text) { try { int sdk = android.os.Build.VERSION.SDK_INT; if (sdk < android.os.Build.VERSION_CODES.HONEYCOMB) { android.text.ClipboardManager clipboard = (android.text.ClipboardManager) context .getSystemService(context.CLIPBOARD_SERVICE); clipboard.setText(text); } else { android.content.ClipboardManager clipboard = (android.content.ClipboardManager) context .getSystemService(context.CLIPBOARD_SERVICE); android.content.ClipData clip = android.content.ClipData .newPlainText( context.getResources().getString( R.string.message), text); clipboard.setPrimaryClip(clip); } return true; } catch (Exception e) { return false; } } @SuppressLint("NewApi") public String readFromClipboard(Context context) { int sdk = android.os.Build.VERSION.SDK_INT; if (sdk < android.os.Build.VERSION_CODES.HONEYCOMB) { android.text.ClipboardManager clipboard = (android.text.ClipboardManager) context .getSystemService(context.CLIPBOARD_SERVICE); return clipboard.getText().toString(); } else { ClipboardManager clipboard = (ClipboardManager) context .getSystemService(Context.CLIPBOARD_SERVICE); // Gets a content resolver instance ContentResolver cr = context.getContentResolver(); // Gets the clipboard data from the clipboard ClipData clip = clipboard.getPrimaryClip(); if (clip != null) { String text = null; String title = null; // Gets the first item from the clipboard data ClipData.Item item = clip.getItemAt(0); // Tries to get the item's contents as a URI pointing to a note Uri uri = item.getUri(); // If the contents of the clipboard wasn't a reference to a // note, then // this converts whatever it is to text. if (text == null) { text = coerceToText(context, item).toString(); } return text; } } return ""; } @SuppressLint("NewApi") public CharSequence coerceToText(Context context, ClipData.Item item) { // If this Item has an explicit textual value, simply return that. CharSequence text = item.getText(); if (text != null) { return text; } // If this Item has a URI value, try using that. Uri uri = item.getUri(); if (uri != null) { // First see if the URI can be opened as a plain text stream // (of any sub-type). If so, this is the best textual // representation for it. FileInputStream stream = null; try { // Ask for a stream of the desired type. AssetFileDescriptor descr = context.getContentResolver() .openTypedAssetFileDescriptor(uri, "text/*", null); stream = descr.createInputStream(); InputStreamReader reader = new InputStreamReader(stream, "UTF-8"); // Got it... copy the stream into a local string and return it. StringBuilder builder = new StringBuilder(128); char[] buffer = new char[8192]; int len; while ((len = reader.read(buffer)) > 0) { builder.append(buffer, 0, len); } return builder.toString(); } catch (FileNotFoundException e) { // Unable to open content URI as text... not really an // error, just something to ignore. } catch (IOException e) { // Something bad has happened. Log.w("ClippedData", "Failure loading text", e); return e.toString(); } finally { if (stream != null) { try { stream.close(); } catch (IOException e) { } } } // If we couldn't open the URI as a stream, then the URI itself // probably serves fairly well as a textual representation. return uri.toString(); } // Finally, if all we have is an Intent, then we can just turn that // into text. Not the most user-friendly thing, but it's something. Intent intent = item.getIntent(); if (intent != null) { return intent.toUri(Intent.URI_INTENT_SCHEME); } // Shouldn't get here, but just in case... return ""; } } 
 ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); String copyedText = clipboard.getText(); 

Puede establecer texto cada EditText de su elección para el contenido de ClipboardManager.

 ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE) EditText editText = (EditText)findViewById(R.id.YOUR_TEXT); editText.setText(clipboard.getText()); 

Creo que algunas de las otras respuestas pueden ser correctas, pero son difíciles de seguir. Si sólo desea "copiar y pegar" algún código en su aplicación, puede utilizar lo siguiente.

Dupdo

 String textToCopy = etCodeWindow.getText().toString(); int sdk = android.os.Build.VERSION.SDK_INT; if(sdk < android.os.Build.VERSION_CODES.HONEYCOMB) { android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); clipboard.setText(textToCopy); } else { android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); android.content.ClipData clip = android.content.ClipData.newPlainText("myLabel", textToCopy); clipboard.setPrimaryClip(clip); } 

Pegar

 CharSequence textToPaste = null; // get the text from the clipboard manager int sdk = android.os.Build.VERSION.SDK_INT; if (sdk < android.os.Build.VERSION_CODES.HONEYCOMB) { android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); try { textToPaste = clipboard.getText(); } catch (Exception e) { e.printStackTrace(); } } else { android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); if (clipboard.getPrimaryClip() != null) { android.content.ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0); textToPaste = item.getText(); } } // insert the text at the cursor position, or if there is a selection it // replaces the selection with the text to paste if (textToPaste != null) { int start = Math.max(myEditText.getSelectionStart(), 0); int end = Math.max(myEditText.getSelectionEnd(), 0); myEditText.getText().replace(Math.min(start, end), Math.max(start, end), textToPaste, 0, textToPaste.length()); } 

Notas

  • Obtendrá advertencias de compilador sobre la depreciación y nuevas API si utiliza el código anterior directamente. Vea mi respuesta un poco más larga sobre cómo silenciar esas advertencias.
  • Si no necesita soportar pre API 11, entonces puede simplificar bastante el código anterior.
  • Gracias a esta y esta respuesta por ayuda.
  • Android - edittext - no se muestran los identificadores de textos y ninguna opción de uso compartido
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.