这个问题要谢谢 论坛区的老哥,在论坛来找到了正确的回答.
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 {@Overridepublic 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();}}
}