剪贴板数据的访问权限

在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);

}

}

});

}

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐