Android Q 获取剪切板内容

作者: YoungerHu | 来源:发表于2019-12-17 17:41 被阅读0次

    一般可以放在Activity的onResume中调用如下方法:

    //获取剪切板内容
    private void getClipboardData() {
        this.getWindow().getDecorView().post(new Runnable() {
            @Override
            public void run() {
                //把获取到的内容打印出来
                Log.i("YoungerHu", ClipBoardUtil.paste());
            }
        });
    }
    

    对应的工具类是:

    /**
     * 剪切板读写工具
     */
    public class ClipBoardUtil {
        /**
         * 获取剪切板内容
         * @return
         */
        public static String paste(){
            ClipboardManager manager = (ClipboardManager) CourserApplication.getContext().getSystemService(Context.CLIPBOARD_SERVICE);
            if (manager != null) {
                if (manager.hasPrimaryClip() && manager.getPrimaryClip().getItemCount() > 0) {
                    CharSequence addedText = manager.getPrimaryClip().getItemAt(0).getText();
                    String addedTextString = String.valueOf(addedText);
                    if (!TextUtils.isEmpty(addedTextString)) {
                        return addedTextString;
                    }
                }
            }
            return "";
        }
    
        /**
         * 清空剪切板
         */
        public static void clear(){
            ClipboardManager manager = (ClipboardManager) CourserApplication.getContext().getSystemService(Context.CLIPBOARD_SERVICE);
            if (manager != null) {
                try {
                    manager.setPrimaryClip(manager.getPrimaryClip());
                    manager.setPrimaryClip(ClipData.newPlainText("",""));
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
    

    具体原因我推测是这样,android Q的规定如下

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

    而在onCreate或者onResume方法时,View可能还处于申请获取焦点状态,导致获取不到剪切板数据,所以当所有View都绘制完毕后,就可以获取到剪切板数据了。

    Ps,所有View绘制完成后才会调用post()方法。

    相关文章

      网友评论

        本文标题:Android Q 获取剪切板内容

        本文链接:https://www.haomeiwen.com/subject/drhenctx.html