일모도원(日暮途遠) 개발자
[안드로이드 개발] 클립보드에 텍스트가 있는데 hasPrimaryClip이 false가 날때 본문
분명히 손으로 붙여넣기하면 텍스트가 붙여넣어지는데, 평소에 잘쓰던 아래 코드가 안먹는다. 보니까 hasPrimaryClip이 false를 리턴한다.
public static String getTextFromClipboard(Context context) {
String str = "";
ClipboardManager cm = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE);
if ((cm != null) && (cm.hasPrimaryClip() == true)) {
ClipData clip = cm.getPrimaryClip();
ClipData.Item item = clip.getItemAt(0);
if ((item != null) && (item.getText() != null)) {
str = item.getText().toString();
}
}
return str;
}
구글링을 해보니까, 이럴때는 딜레이를 좀 줘서 실행해보라고 한다. 이렇게 하니 정상적으로 된다.
//getTextFromClipboard가 안먹는 경우는 아래를 사용하자.
public interface CopyConvPracticeListener {
public void countOfSentencesToCopy(int countToCopy);
}
public static void getTextFromClipboardWithDelay(Context context, final OnTextFromClipboardListener listener) {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
String str = "";
ClipboardManager cm = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
if (cm != null && cm.hasPrimaryClip()) {
ClipData clip = cm.getPrimaryClip();
ClipData.Item item = clip.getItemAt(0);
if (item != null && item.getText() != null) {
str = item.getText().toString();
}
}
listener.onTextFromClipboard(str);
}
}, 1000);
}
부를때는 아래처럼 부르면 된다.
//부르는 쪽에서는 아래처럼
CopyTextUtil.getTextFromClipboardWithDelay(this, new CopyTextUtil.OnTextFromClipboardListener() {
@Override
public void onTextFromClipboard(String text) {
//text에는 클립보드의 내용이 들어가 있다.
}
});
//람다를 이용하면 코드를 좀 줄일수 있다.
CopyTextUtil.getTextFromClipboardWithDelay(this, (text) -> {
//text에는 클립보드의 내용이 들어가 있다.
});
'안드로이드 개발 > 안드로이드' 카테고리의 다른 글
[Android 개발] 카메라 앱 기본 기능 (0) | 2023.09.04 |
---|---|
[안드로이드개발] ExoPlayer 백그라운드에 오래있으면 화면 먹통되는 현상 (0) | 2023.05.04 |
[안드로이드 개발] 아직도 헷갈리는 안드로이드 폴더 구조. (0) | 2023.04.07 |
[안드로이드UI] 채팅 대화내역 키보드에 안가리게 하기. (0) | 2023.04.01 |
[안드로이드개발] 릴리즈 모드에서만 죽는 현상 proguard관련 (0) | 2023.03.31 |