【Android】 剪贴板 clipManager.hasPrimaryClip return false

类似于淘宝淘口令一样的功能。打开app监测粘贴板功能。本来好好的功能突然不好用了。
经查是

clipManager.hasPrimaryClip()   return false 

费了“九牛二虎之力”后(google一下)

Android 10 中 只有默认输入法(IME)或者是目前处于焦点的应用, 才能访问到剪贴板数据.

本来在onStart 进行监测的。所以咱们改到onResume中进行监听。并增加200ms的延时。这样就ok了。

下面附上粘贴板的工具类

public class ClipboardUtils {
    
    
    //获取粘贴板的信息
    public static void getContent(Context context) {
    
    
        try {
    
    
            ClipboardManager clipManager = (ClipboardManager) context.getSystemService(CLIPBOARD_SERVICE);
            //无数据时直接返回
            if (clipManager == null || !clipManager.hasPrimaryClip()) {
    
    
                return;
            }
            //如果是文本信息
            if (clipManager != null && clipManager.getPrimaryClipDescription() != null && clipManager.getPrimaryClipDescription().hasMimeType(ClipDescription.MIMETYPE_TEXT_PLAIN)) {
    
    
                ClipData clip = clipManager.getPrimaryClip();
                if (clip != null) {
    
    
                    ClipData.Item item = clip.getItemAt(0);

                    if (item.getText() != null) {
    
    
                        //此处是TEXT文本信息
                        String content = item.getText().toString();
                        //todo
                        //做你自己的逻辑处理.处理完成记得清空粘贴板.
                        //clipManager.setText("");
                    }
                }
            }
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }

    public static void copyString(Context context, String content) {
    
    
        ClipboardManager cm = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
        if (StringUtil.isNotNull(content)) {
    
    
            cm.setText(content);
            ToastUtils.toastShort("");
        } else {
    
    
            ToastUtils.toastShort("");
        }
    }
}

猜你喜欢

转载自blog.csdn.net/mingtiannihao0522/article/details/121531049
今日推荐