当前位置: 代码迷 >> 综合 >> andoridQ获取剪切板内容,当复制内容到剪切板,应用从后台切换到前台,无法获取剪切板内容问题
  详细解决方案

andoridQ获取剪切板内容,当复制内容到剪切板,应用从后台切换到前台,无法获取剪切板内容问题

热度:82   发布时间:2023-10-20 14:06:32.0

 

这个问题要谢谢 论坛区的老哥,在论坛来找到了正确的回答.

 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();}}
}
  相关解决方案