android Q以上剪贴板的坑

1,679 阅读1分钟

测试的时候发现在android Q以上的手机上当 activity 页面失去焦点的时候是获取不到 剪贴板的数据的,直接返回null。
典型的场景就是,口令功能的实现,在APP首页中获取剪贴板内容识别口令;同时在首页也做申请权限操作。
系统的授权弹窗弹出来的时候就会导致 activity 失去焦点,拿不到剪贴板的数据。 我是实现的ActivityLifecycleCallbacks。然后在onActivityStarted中做判断获取剪贴板内容。 解决上面的问题很简单,在获取剪贴板内容是做个判断,如果为null,就做个标记;然后在 onActivityResumed 中根据标记的状态再获取一次剪贴板数据就可以了。

public class StatisticActivityLifecycleCallback implements Application.ActivityLifecycleCallbacks {
    private boolean isNullData = false; // 是否拿到剪贴板数据

  @Override
  public void onActivityStarted(final Activity activity){
    ....
  
    ClipboardManager clipboardManager = (ClipboardManager) MSApplication.mContext.getSystemService(Context.CLIPBOARD_SERVICE);
    ClipData clipData = clipboardManager.getPrimaryClip();
    
    if(clipData == null) {
    	isNullData = true;
        // 这里获取剪贴板数据
    } else {
    	isNullData = false;
    }
    ....
  }
  
  @Override
  public void onActivityResumed(Activity activity) {
  	// 这里重新获取一次剪贴板数据
  }
}