Android에서 ClipData의 "label"매개 변수는 정확히 무엇입니까?


79

Android 문서 에 따르면 ClipData는 복사 된 데이터에 대한 일종의 표현으로 '라벨'을 사용합니다.

ClippedData는 하나 이상의 항목 인스턴스를 포함하는 복합 유형으로, 각 인스턴스는 데이터 항목의 하나 이상의 표현을 보유 할 수 있습니다. 사용자에게 표시하기 위해 레이블과 아이콘 표현도 있습니다.

그런 다음 일부 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();
}

답변:


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

여기 텍스트 레이블은 클립에있는 데이터를 설명합니다.

예.

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

우리는 이것을 사용하여 검색 할 수 있습니다.

clip.getDescription ();

4
User"클립 데이터에 대한 사용자 표시 레이블"문서 의 용어 가 실제로 앱 사용자 대신 개발자를 의미합니까? 응용 프로그램의 사용자가이 라벨을 아는 나는 ... 값이 표시되지 않습니다
hackjutsu

39
레이블은 앱 사용자가 아닌 개발자 전용입니다.
Gaurav

3
좋은! "User-visible"이라는 설명에 혼란 스러웠지만 이제는 분명합니다.
hackjutsu

24

문서의 "사용자가 볼 수있는 클립 데이터 레이블"설명은 개발자가 설정 한 다음 Android 시스템이 사용자에게 표시하는 것이 아니라 사용자에게 직접 표시 할 수있는 것으로 해석되어야합니다.

Android 소스 코드를 볼 때 ClipDescription.getLabel () 메서드는 Android 5.0 이전에 사용되지 않는 것 같습니다. 5.0 RemoteInput 에서 RemoteInputCompatJellybean 및 com.android.mail.compose.ComposeActivity는 메소드를 사용하여 명시되었습니다 .

사용법을 살펴보면 이러한 모든 레이블이 사용자에게 표시되지 않고 코드의 다른 위치에있는 클립을 프로그래밍 방식으로 식별하는 데 사용됩니다.

ClipData.newPlainText () 사용 방법을 볼 때Android 내에서 대부분의 경우 null이 레이블로 지정되어 레이블이 실제로 어떤 용도로도 사용되지 않음을 나타냅니다.

물론 일부 휴대폰 제조업체 또는 다른 앱 개발자가 레이블을 가져 와서 어떤 상황에서 사용자에게 표시 할 수도 있습니다. 그러나 일반적으로 클립의 레이블은 사용자가 직접 표시하는 경우에만 앱에서 사용자에게 표시된다고 가정하는 것이 안전해야합니다.


2

오늘 내 앱에서 작업하는 동안 ClipData 레이블의 사용 사례를 발견했습니다. 일부 앱은 null로 설정하고 다른 앱은 거의 사용합니다.

내 앱의 경우 ClipManager의 addPrimaryClipChangedListener

거의 항상 백그라운드에서 실행되는 서비스 클래스에서이 작업을 수행하고 있습니다. 내 앱 내에서 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));
    }

이게 도움이 되길 바란다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.