剪貼板數據的訪問權限
在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);
}
}
});
}