这个问题要谢谢 论坛区的老哥,在论坛来找到了正确的回答.
androidQ 对剪切板的改动是,当应用没有获取到焦点的时候是无法读取剪切板内容的。
但是, 在应用切换到前台的时候,此时app获取到了焦点啊?有人会有这样的疑问。。
其实是,获取到焦点,和获取到剪切板内容的这个过程必须有一个延迟, 写一个线程延迟一秒左右,再去去读剪切板内容,就可以读取到了.
这个也困扰了好久,终于找到了原因,希望能帮你解决问题O(∩_∩)O
方法一:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
//获取剪切板文字逻辑写到这里。
}
}
方法二:
//我的Baseactivity 的 重写的方法
@Override
protected void onResume() {
super.onResume();
//必须放在 hander的 runable 异步线程中(不能放在Thread 中,有的手机(oppo就会出现)会报线程中不能使用hander 的异常,
可能获取剪切板的操作 在不能在Thread线程中使用吧)
Handler mHandler = new Handler(Looper.getMainLooper());
Message message = handler.obtainMessage();
//延迟一秒
mHandler.postDelayed(new ContentRunThread(), 1000);
mHandler.sendMessage(message);
}
//获取剪切板的内容
class ContentRunThread implements Runnable {
@Override
public void run() {
StatService.onResume(BaseActivity.this);
// 获取剪贴板数据
String content = null;
ClipboardManager cm = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
try {
ClipData data = cm.getPrimaryClip();
ClipData.Item item = data.getItemAt(0);
if (!Utils.isEmpty(item.getText() + "")) {
content = item.getText().toString();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}