在Android平台上,使用CupertinoTextField默认是无法跨应用读取剪贴板内容的。
这是因为在Android上,剪贴板的读取和写入是受到应用沙盒安全机制的限制的。每个应用都有自己的沙盒环境,不能直接读取其他应用的剪贴板内容。
但是在同一个应用复制的内容,flutter可以获取到。在原生端页面是可以跨应用获取内容的,可能是原生做了处理。
解决方案:可以在页面显示到前台的时候,先获取复制的内容然后再复制在剪切板上。
override fun onActivityResumed(activity: Activity) {
activity.replaceStackTop()
activity.window.decorView.post {
dealPaste(activity)
}
}
private fun dealPaste(context: Context) {
val manager = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
manager?.let {
it.primaryClip?.let { clipData ->
if(clipData.itemCount > 0) {
val addedText = clipData.getItemAt(0).text
if (addedText != null) {
val addedTextString = addedText.toString()
if (!TextUtils.isEmpty(addedTextString)) {
// 使用剪贴板内容...
manager.setPrimaryClip(ClipData.newPlainText("copy", addedTextString))
}
}
}
}
}
}
网友评论