剪贴板数据的访问权限
在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);
}
}
});
}