安卓 复制文字 及从 剪贴(切)板 获取内容
Posted 夜尽天明89
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安卓 复制文字 及从 剪贴(切)板 获取内容相关的知识,希望对你有一定的参考价值。
最近有个需求,进入某个界面后,要监听 剪贴(切)板 中是否有文字,有的话,拿到,分析是否是需要的,然后进行对应的处理。
功能看着简单,但是 因为手机系统原因,踩了个坑,这里记录下。
先来个复制文字功能代码,很简单,不多说了
导包
import android.content.ClipboardManager
代码
val clipboardManager =
context.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager
val clicpData =ClipData.newPlainText("字符串", "字符串")
clipboardManager?.primaryClip = clicpData
获取剪贴板内容
导包
import android.content.ClipData
import android.content.ClipboardManager
//获取复制内容
private fun getCopyContent(context: Context): String
try
val clipboardManager: ClipboardManager? =
context.getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager
if (clipboardManager != null)
val clipData: ClipData? = clipboardManager.primaryClip
if (clipboardManager.hasPrimaryClip() && clipData != null && clipData?.itemCount ?: 0 > 0)
val item: ClipData.Item = clipData.getItemAt(0)
val sequence: CharSequence = item.text
return sequence.toString()
else
return ""
else
return ""
catch (e: Exception)
return ""
使用
copy_tv?.post
val text: String = getCopyContent(this)
if (text.isEmpty())
Toast.makeText(this, "复制文本为空", Toast.LENGTH_SHORT).show()
else
copy_tv?.text = text
这里有个地方是坑,要注意,就是 view.post…
同样的代码,在安卓 8.1.0系统手机上正常,但是在10就不行,获取到的内容,一直为空。
这是因为,在10系统上,不用post时
clipboardManager.hasPrimaryClip() = false
clipData = null
通过查阅,得到一个猜想:在onCreate或者onResume方法时,View可能还处于申请获取焦点状态,导致获取不到剪切板数据,所以当所有View都绘制完毕后,就可以获取到剪切板数据了。
也就是说,在10上,需要等控件由了焦点,才能获取到剪切板中的数据。所有,这里用了post,在绘制完成,有了焦点后,再去检查 剪切板中是否有内容。
验证(图片是否有影响,分2种情况验证):
1、在头条上,找个内容进行复制
打开测试APP,看是否会自动获取及展示文字
2、如果文字中间有图片呢?打开浏览器,随便找个带图片的新闻
打开测试APP
以上是关于安卓 复制文字 及从 剪贴(切)板 获取内容的主要内容,如果未能解决你的问题,请参考以下文章