Android Q 访问剪切板数据

本节内容测试Android Q对剪切板数据的访问


变化

Android Q 对访问剪切板数据进行了限制,非系统默认输入法以及后台运行的程序是无法访问到剪切板数据

测试示例 —— 后台运行的程序访问剪切板

测试之前我复制了本博客地址:https://shoewann0402.github.io

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package com.xw.clipboarddemo

import android.content.ClipboardManager
import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import kotlinx.android.synthetic.main.activity_main.*


class MainActivity : AppCompatActivity() {

private val tag: String = MainActivity::class.java.simpleName
private var cm: ClipboardManager? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

cm = this.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager?

//1.直接获取剪切板数据
getClipboardData()

//2.点击按钮获取剪切板数据
btn_get_clipboard_data.setOnClickListener {
getClipboardData()
}

}

//获取剪切板数据的方法
private fun getClipboardData() {
Log.d(tag, getString(R.string.get_clipboard_data))
//如果当前剪贴板上存在Copy返回True
val hasPrimaryClip = cm!!.hasPrimaryClip()
Log.d(tag, "${getString(R.string.hasPrimaryClip)}$hasPrimaryClip")
if (hasPrimaryClip) {
val abc = cm!!.primaryClip
if (abc != null) {
val item = abc.getItemAt(0)
val text = item.text.toString()
Log.d(tag, "${getString(R.string.clipboard_data)}$text")
}
//对剪贴板文字的操作
}
}
}

当应用加载成功,输出日志:

1
2
2019-03-27 17:17:17.127 26244-26244/com.xw.clipboarddemo D/MainActivity: 获取剪切板数据
2019-03-27 17:17:17.128 26244-26244/com.xw.clipboarddemo D/MainActivity: 剪切板是否含有复制数据:false

然后点击按钮,输出日志:

1
2
3
2019-03-27 17:17:18.924 26244-26244/com.xw.clipboarddemo D/MainActivity: 获取剪切板数据
2019-03-27 17:17:18.924 26244-26244/com.xw.clipboarddemo D/MainActivity: 剪切板是否含有复制数据:true
2019-03-27 17:17:18.925 26244-26244/com.xw.clipboarddemo D/MainActivity: [剪切板数据]:https://shoewann0402.github.io

可见Android Q上只有当前应用获取了焦点,运行在前台才能访问到剪切板数据,在后台无法获取到剪切板的数据

针对默认键盘这种方式的,这里不做测试了

本文参考官方文档简单总结,感谢您的阅读。如有不足,欢迎指正

if (本文对您有用) { Pay (请随意¥打赏) } else { Commit feedback (底部评论区提交建议、反馈) } 感谢支持!