Selon le Android documentation , ClipData utilise le "label" comme une sorte de représentation des données copiées.
ClippedData est un type complexe contenant une ou des instances d'élément, chacune pouvant contenir une ou plusieurs représentations d'un élément de données. Pour l'affichage à l'utilisateur, il a également une étiquette et une représentation iconique.
Et ensuite, il explique plus en détail "étiquette" comme Étiquette visible par l'utilisateur pour les données de clip dans certains documents API . Cependant, je suis toujours confus quant à l'utilisation de l'étiquette.
Comment cette étiquette est-elle visible pour les utilisateurs? Comment dois-je l'utiliser? Que dois-je définir pour cette étiquette lorsque j'appelle la méthode d'usine ClipData newPlainText(CharSequence label, CharSequence text)
? par exemple:
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();
}
ClipData clip = ClipData.newPlainText(
"text label",
"content to be copied");
ici l'étiquette de texte décrit les données contenues dans le clip
par exemple.
ClipData clip = ClipData.newPlainText(
"user Name",
user.getName());
nous pouvons revivre cela en utilisant
clip.getDescription ();
Il semble que la description "Étiquette visible par l'utilisateur pour les données de clip" dans la documentation doit être interprétée comme quelque chose que vous, en tant que développeur, pouvez définir, puis montrer à l'utilisateur vous-même et non comme quelque chose que le système Android montrera à l'utilisateur.
Lorsque vous regardez le code source Android, la méthode ClipDescription.getLabel () semble être inutilisée avant Android 5.0. Dans 5.0 RemoteInput , RemoteInputCompatJellybean et com.Android.mail.compose.ComposeActivity ont indiqué en utilisant la méthode .
Si vous regardez l'utilisation, tous ces éléments définissent une étiquette qui n'est pas destinée à être vue par l'utilisateur mais utilisée à la place pour identifier par programmation le clip à un endroit différent dans le code.
Lorsque vous regardez comment ClipData.newPlainText () est utilisé dans Android, la plupart du temps, null est donné comme étiquette, suggérant que l'étiquette n'est pas vraiment utilisée pour quoi que ce soit.
Il est bien sûr possible qu'un fabricant de téléphones ou un autre développeur d'application prenne l'étiquette et l'affiche à l'utilisateur dans certaines situations. Mais en général, il devrait être prudent de supposer que l'étiquette d'un clip ne sera montrée à l'utilisateur dans votre application que si vous la montrez vous-même.
Aujourd'hui, en travaillant sur mon application, j'ai découvert un cas d'utilisation pour le label ClipData. Certaines applications le définissent sur null tandis que d'autres applications l'utilisent à peu près.
Dans le cas de mon application, j'écoute addPrimaryClipChangedListener
du ClipManager
Je fais cela dans une classe de service qui s'exécute en arrière-plan presque tout le temps. Je veux traiter les données ajoutées au primaireClip depuis mon application différemment des données ajoutées dans une autre application (disons du texte copié dans un navigateur Web).
Voici un extrait de mon code et comment j'utilise l'étiquette 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
}
}
});
Dans mon application, lorsque j'ajoute des données à primaryClip, j'inclus l'étiquette comme ceci:
private void addToClipboard(String text) {
mClipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
mClipboardManager.setPrimaryClip(ClipData.newPlainText("auto_copy_text", text));
}
J'espère que ça aide