versiones pie oreo developer caracteristicas android clipboard clipboardmanager

pie - ¿Qué es exactamente el parámetro "etiqueta" en ClipData en Android?



android versiones (3)

Según la documentation Android, ClipData utiliza "etiqueta" como una especie de representación de los datos copiados.

ClippedData es un tipo complejo que contiene una o instancias de elemento, cada una de las cuales puede contener una o más representaciones de un elemento de datos. Para mostrar al usuario, también tiene una etiqueta y una representación icónica.

Y luego explica "etiqueta" como etiqueta visible para el usuario para los datos del clip en algunos documentos API . Sin embargo, todavía estoy confundido sobre el uso de la etiqueta.

¿Cómo es esta etiqueta visible para los usuarios? ¿Cómo debo usarlo? ¿Qué debo configurar para esta etiqueta cuando llamo al método de fábrica newPlainText(CharSequence label, CharSequence text) ? por ejemplo:

private void copyToClipBoard() { ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); ClipData clip = ClipData.newPlainText( "text label", // What should I set for this "label"? "content to be copied"); clipboard.setPrimaryClip(clip); Toast.makeText(AboutActivity.this, "Saved to clip board", Toast.LENGTH_SHORT).show(); }


Hoy, mientras trabajaba en mi aplicación, descubrí un caso de uso para la etiqueta ClipData. Algunas aplicaciones lo configuran como nulo, mientras que otras lo usan más o menos.

En el caso de mi aplicación, estoy escuchando addPrimaryClipChangedListener de addPrimaryClipChangedListener

Estoy haciendo esto en una clase de servicio que se ejecuta en segundo plano casi todo el tiempo. Quiero tratar los datos agregados al PrimaryClip desde mi aplicación de manera diferente a los datos agregados en otra aplicación (digamos que el texto copiado en un navegador web).

Aquí hay un extracto de mi código y cómo estoy usando la etiqueta ClipData:

mClipBoardManager.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() { @Override public void onPrimaryClipChanged() { String clipLabel = "default"; if (mClipBoardManager.getPrimaryClip().getDescription().getLabel() != null) { clipLabel = mClipBoardManager.getPrimaryClip().getDescription().getLabel().toString(); } if (clipLabel.equals("auto_copy_text")) { //TODO: Text from my app do stuffs you will do with text from my app } else { //TODO: Text from some other app } } });

En mi aplicación cuando agrego datos a primaryClip, incluyo la etiqueta de esta manera:

private void addToClipboard(String text) { mClipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); mClipboardManager.setPrimaryClip(ClipData.newPlainText("auto_copy_text", text)); }

espero que esto ayude


Parece que la descripción de "Etiqueta visible para el usuario para los datos del clip" en la documentación debe interpretarse como algo que usted, como desarrollador, puede configurar y luego mostrarle al usuario usted mismo y no como algo que el sistema Android mostrará al usuario.

Al mirar el código fuente de Android, el método ClipDescription.getLabel() parece estar sin usar antes de Android 5.0. En 5.0 RemoteInput , RemoteInputCompatJellybean y com.android.mail.compose.ComposeActivity declararon usar el método .

Si observa el uso, todo esto establece una etiqueta que no debe ser vista por el usuario, sino que se usa para identificar programáticamente el clip en un lugar diferente del código.

Al observar cómo se usa ClipData.newPlainText () en Android, la mayoría de las veces se da como nulo la etiqueta, lo que sugiere que la etiqueta no se usa realmente para nada.

Por supuesto, es posible que algún fabricante de teléfonos u otro desarrollador de aplicaciones tome la etiqueta y se la muestre al usuario en alguna situación. Pero, en general, debería ser seguro asumir que la etiqueta de un clip solo se mostrará al usuario en su aplicación si la muestra usted mismo.


ClipData clip = ClipData.newPlainText( "text label", "content to be copied");

aquí la etiqueta de texto describe qué datos hay en el clip

p.ej.

ClipData clip = ClipData.newPlainText( "user Name", user.getName());

podemos recuperar esto usando

clip.getDescription ();