剪贴板数据的访问权限
在Android10上面,除非应用是默认输入法 (IME) 或是目前处于焦点的应用,否则它无法访问 Android 10 或更高版本平台上的剪贴板数据。文档链接
适配方案
方案一:在onResume中,通过post延时到界面拥有焦点时读取剪切板
@Override protected void onResume() { super.onResume(); getWindow().getDecorView().post(new Runnable() { @Override public void run() { mBinding.clipText.setText(getClipData(MainActivity.this)); } }); }
方案二:在onCreate中,通过addOnWindowFocusChangeListener去监听当且界面的焦点变化,不过需要记得的是,读取完剪切板需要remove监听
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().getDecorView().getViewTreeObserver().addOnWindowFocusChangeListener(new ViewTreeObserver.OnWindowFocusChangeListener() { @Override public void onWindowFocusChanged(boolean hasFocus) { if (hasFocus) { mBinding.clipText.setText(getClipData(MainActivity.this)); getWindow().getDecorView().getViewTreeObserver().removeOnWindowFocusChangeListener(this); } } }); }