web-dev-qa-db-ja.com

AndroidのClipDataの「ラベル」パラメータとは正確には何ですか?

Android documentation によれば、ClipDataはコピーされたデータの一種の表現として「ラベル」を使用します。

ClippedDataは、1つ以上のItemインスタンスを含む複合型であり、各インスタンスは、データ項目の1つ以上の表現を保持できます。ユーザーに表示するために、ラベルとアイコン表示もあります。

さらに、「ラベル」をとして説明します。一部の APIドキュメント で、クリップデータのユーザーに見えるラベルを示します。しかし、私はまだラベルの使用法について混乱しています。

このラベルはどのようにユーザーに表示されますか?どのように使用すればよいですか? ClipDataファクトリメソッド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();
}
54
hackjutsu
ClipData clip = ClipData.newPlainText(
            "text label", 
            "content to be copied");

ここで、テキストラベルはクリップ内のデータを説明します

例えば。

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

を使用してこれを取得できます

clip.getDescription ();
55
Gaurav

ドキュメントの「ユーザーに表示されるクリップデータのラベル」の説明は、開発者が設定して、Androidシステムではなくユーザーに表示できるものとして解釈される必要があるようです。ユーザーに表示されます。

Androidソースコードを見ると、 ClipDescription.getLabel() メソッドはAndroid 5.0以前では使用されていないようです。 5.0では RemoteInput 、RemoteInputCompatJellybeanおよびcom.Android.mail.compose.ComposeActivityが指定されました メソッドを使用

使用法を見ると、これらはすべて、ユーザーが見ることを意図したものではなく、コード内の別の場所でクリップをプログラムで識別するために使用されるラベルを設定します。

Android内でClipData.newPlainText() 使用される の方法を見ると、ほとんどの場合nullがラベルとして指定されており、ラベルは実際には何にも使用されていないことが示唆されます。

もちろん、携帯電話メーカーや他のアプリ開発者がラベルを取得して、ある状況でユーザーに表示することは可能です。ただし、一般的に、クリップのラベルは、自分で表示した場合にのみ、アプリ内のユーザーに表示されると想定しても安全です。

21
nibarius

今日、私のアプリの作業中に、ClipDataラベルの1つのユースケースを発見しました。一部のアプリはこれをnullに設定しますが、他のアプリはほとんど使用します。

私のアプリの場合、ClipManagerのaddPrimaryClipChangedListenerを聞いています。

私はほとんど常にバックグラウンドで実行されるサービスクラスでこれを行っています。アプリ内でprimaryClipに追加されたデータを、別のアプリで追加されたデータとは別のものとして扱いたい(テキストをWebブラウザーでコピーしたとしましょう)。

コードの抜粋と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));
    }

これが役立つことを願っています

0
Eaweb