android - 如何在Android Q(10)中以编程方式访问剪贴板数据?
问题描述
正如我们所知,在后台通过剪贴板管理器读取数据已被 Google 在 android Q 中停止,所以无论如何我都需要在用户返回活动时粘贴直接复制到编辑文本中的数据,而无需用户进行粘贴且没有粘贴按钮。
问题是尝试使用getPrimaryClip()
返回读取数据null
。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_copy_and_paste);
ed_editText = findViewById(R.id.ed_editText);
}
@Override
protected void onResume() {
super.onResume();
getCopy()
}
private void getCopy() {
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
if (clipboard != null && clipboard.hasPrimaryClip() && clipboard.getPrimaryClip() != null) {
CharSequence clip = clipboard.getPrimaryClip().getItemAt(0).coerceToText(CopyAndPasteActivity.this).toString();
ed_editText.setText(clip.toString());
}
}
XML
<EditText
android:id="@+id/ed_editText"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginLeft="24dp"
android:layout_marginStart="24dp"
android:maxLines="1"
android:lines="1"
android:focusable="true"
android:textSize="14sp"
android:inputType="text"
android:focusableInTouchMode="true"
android:layout_weight="1"
android:background="@null" >
<requestFocus />
</EditText>
解决方案
您应该在 中访问剪贴板Window.Callback.onWindowFocusChanged(true)
,因为那是您获得输入焦点的时刻,这是在 Android 10 (Q) 中读取剪贴板所必需的。您还不一定在onResume
.
推荐阅读
- python - 带等高线图的时间轴。Python
- amazon-web-services - ELB 和 Route 53 健康检查之间的区别
- php - 正则表达式,排除 html 中的文件名
- coinbase-api - 查询Coinbase Pro Stablcoin转换历史
- android - Android 中的 Azure Cosmos DB 连接?
- postgresql - postgres触发器中的列数据类型
- python - 我想改变我的禁令命令不禁止任何工作人员 discord.py
- webpack - 错误 NullInjectorError: R3InjectorError(AppModule)[Page -> Page -> Page]:
- webassembly - 是否可以从 AssemblyScript 导入 .wasm 文件?
- windows - 如何创建包含每天下载的文件的链接。(MKLINK)