开始我以为是代码问题,此方法前几次只能取到空文本,但多次调用可以获得内容,后来发现不是这个方法的代码问题,原来是Google改了玩法…
private String get_copy(){
String content = "";
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
try {
ClipData clipData = clipboard.getPrimaryClip();
ClipData.Item item = clipData.getItemAt(0);
content = item.getText().toString();
} catch (Exception e) {
e.printStackTrace();
}
return content;
}
}
经查阅,在Android 高版本上,AndroidQ 对剪切板的改动是:当应用没有获取到焦点时,无法读取剪切板内容。
开始我想,应用切换到前台的时候,此时App应该是获取到了焦点。
但是,获取到焦点,和获取到剪切板内容的这个过程必须有一个延迟, 写一个线程延迟一秒左右,再去去读剪切板内容,就可以读取到。
所以得出结论:获取剪切板内容要等待一秒。
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
//此处可放 调用获取剪切板内容的代码
//get_copy();
}
}, 1000);//1秒后执行Runnable中的run方法