Android 中的 ClipData 中的 "label" 参数到底是什么?
What exactly is "label" parameter in ClipData in Android?
根据Android documentation,ClipData使用"label"作为复制数据的一种表示。
ClippedData is a complex type containing one or Item instances, each of which can hold one or more representations of an item of data. For display to the user, it also has a label and iconic representation.
然后它进一步解释了 "label" 在某些 API docs 中 剪辑数据的用户可见标签 。但是,我仍然对标签的用法感到困惑。
用户如何看到此标签?我应该如何使用它?调用ClipData工厂方法时,这个label应该怎么设置newPlainText(CharSequence label, CharSequence text)
?例如:
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");
这里的文本标签描述了剪辑中的数据
例如。
ClipData clip = ClipData.newPlainText(
"user Name",
user.getName());
我们可以使用
来检索它
clip.getDescription ();
文档中的 "User-visible label for the clip data" 描述似乎应该解释为您作为开发人员可以设置然后自己显示给用户的内容,而不是 Android 系统将显示的内容给用户。
在查看 Android 源代码时 ClipDescription.getLabel() method seems to be unused before Android 5.0. In 5.0 RemoteInput, RemoteInputCompatJellybean and com.android.mail.compose.ComposeActivity stated using the method。
如果您查看所有这些用法,则会设置一个标签,该标签不应该被用户看到,而是用于以编程方式识别代码中不同位置的剪辑。
当查看 ClipData.newPlainText() is used 在 Android 中的表现时,大多数时候 null 作为标签给出,这表明该标签实际上并没有用于任何用途。
当然有可能某些 phone 制造商或其他应用程序开发人员在某些情况下使用标签并将其显示给用户。但总的来说,假设剪辑的标签只有在您自己显示时才会在您的应用中显示给用户,这应该是安全的。
今天,在开发我的应用程序时,我发现了 ClipData 标签的一个用例。一些应用程序将它设置为 null,而其他应用程序几乎使用它。
就我的应用而言,我正在收听 ClipManager 的 addPrimaryClipChangedListener
我在几乎一直在后台运行的服务 class 中执行此操作。我想处理从我的应用程序中添加到 primaryClip 的数据,而不是添加到另一个应用程序中的数据(比如说在网络浏览器中复制的文本)。
这是我的代码的摘录以及我如何使用 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
}
}
});
在我的应用程序中,当我向 primaryClip 添加数据时,我包含了这样的标签:
private void addToClipboard(String text) {
mClipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
mClipboardManager.setPrimaryClip(ClipData.newPlainText("auto_copy_text", text));
}
希望对您有所帮助
我注意到的另一件事是,如果用户再次复制具有相同标签的数据,那么之前具有相同标签的文本将被覆盖。所以一个标签只能保留一份数据,有助于清理以前的混乱。
标签还可用于识别您的独特文本,并可用于检索您的文本数据,即使它不是用户复制的最后一个东西。
根据Android documentation,ClipData使用"label"作为复制数据的一种表示。
ClippedData is a complex type containing one or Item instances, each of which can hold one or more representations of an item of data. For display to the user, it also has a label and iconic representation.
然后它进一步解释了 "label" 在某些 API docs 中 剪辑数据的用户可见标签 。但是,我仍然对标签的用法感到困惑。
用户如何看到此标签?我应该如何使用它?调用ClipData工厂方法时,这个label应该怎么设置newPlainText(CharSequence label, CharSequence text)
?例如:
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");
这里的文本标签描述了剪辑中的数据
例如。
ClipData clip = ClipData.newPlainText(
"user Name",
user.getName());
我们可以使用
来检索它clip.getDescription ();
文档中的 "User-visible label for the clip data" 描述似乎应该解释为您作为开发人员可以设置然后自己显示给用户的内容,而不是 Android 系统将显示的内容给用户。
在查看 Android 源代码时 ClipDescription.getLabel() method seems to be unused before Android 5.0. In 5.0 RemoteInput, RemoteInputCompatJellybean and com.android.mail.compose.ComposeActivity stated using the method。
如果您查看所有这些用法,则会设置一个标签,该标签不应该被用户看到,而是用于以编程方式识别代码中不同位置的剪辑。
当查看 ClipData.newPlainText() is used 在 Android 中的表现时,大多数时候 null 作为标签给出,这表明该标签实际上并没有用于任何用途。
当然有可能某些 phone 制造商或其他应用程序开发人员在某些情况下使用标签并将其显示给用户。但总的来说,假设剪辑的标签只有在您自己显示时才会在您的应用中显示给用户,这应该是安全的。
今天,在开发我的应用程序时,我发现了 ClipData 标签的一个用例。一些应用程序将它设置为 null,而其他应用程序几乎使用它。
就我的应用而言,我正在收听 ClipManager 的 addPrimaryClipChangedListener
我在几乎一直在后台运行的服务 class 中执行此操作。我想处理从我的应用程序中添加到 primaryClip 的数据,而不是添加到另一个应用程序中的数据(比如说在网络浏览器中复制的文本)。
这是我的代码的摘录以及我如何使用 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
}
}
});
在我的应用程序中,当我向 primaryClip 添加数据时,我包含了这样的标签:
private void addToClipboard(String text) {
mClipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
mClipboardManager.setPrimaryClip(ClipData.newPlainText("auto_copy_text", text));
}
希望对您有所帮助
我注意到的另一件事是,如果用户再次复制具有相同标签的数据,那么之前具有相同标签的文本将被覆盖。所以一个标签只能保留一份数据,有助于清理以前的混乱。 标签还可用于识别您的独特文本,并可用于检索您的文本数据,即使它不是用户复制的最后一个东西。