object AppClipboardManager {
private val appContext = MyApplication.instance
private val clipboardManager =
appContext.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
/**
* 底层是一个集合
*/
fun addPrimaryClipChangedListener(listener: OnPrimaryClipChangedListener?) {
clipboardManager.addPrimaryClipChangedListener(listener)
}
/**
* 底层是一个集合
*/
fun removePrimaryClipChangedListener(listener: OnPrimaryClipChangedListener?) {
clipboardManager.removePrimaryClipChangedListener(listener)
}
/**
* 剪切板是否含有内容
*/
fun hasPrimaryClip(): Boolean {
return clipboardManager.hasPrimaryClip()
}
/**
* 复制文字到剪切板
*/
fun copyClipboardText(content: String) {
val mClipData = ClipData.newPlainText(appContext.getString(R.string.app_name), content)
clipboardManager.setPrimaryClip(mClipData)
}
fun copyClipboardHtml(content: String, htmlText: String) {
val mClipData =
ClipData.newHtmlText(appContext.getString(R.string.app_name), content, htmlText)
clipboardManager.setPrimaryClip(mClipData)
}
fun copyClipboardUri(uri: Uri) {
val mClipData =
ClipData.newUri(
appContext.contentResolver,
appContext.getString(R.string.app_name),
uri
)
clipboardManager.setPrimaryClip(mClipData)
}
fun copyClipboardRawUri(uri: Uri) {
val mClipData = ClipData.newRawUri(appContext.getString(R.string.app_name), uri)
clipboardManager.setPrimaryClip(mClipData)
}
fun copyClipboardIntent(intent: Intent) {
val mClipData = ClipData.newIntent(appContext.getString(R.string.app_name), intent)
clipboardManager.setPrimaryClip(mClipData)
}
/**
* 从剪切板读取文字
*/
fun readClipboardText(): String {
if (hasPrimaryClip()) {
val clipData = clipboardManager.primaryClip
if (clipData != null && clipData.itemCount > 0) {
val text = clipData.getItemAt(0).text
return text.toString()
}
}
return ""
}
fun readClipboardHtmlText(): String {
if (hasPrimaryClip()) {
val clipData = clipboardManager.primaryClip
if (clipData != null && clipData.itemCount > 0) {
return clipData.getItemAt(0).htmlText
}
}
return ""
}
fun readClipboardUri(): Uri? {
if (hasPrimaryClip()) {
val clipData = clipboardManager.primaryClip
if (clipData != null && clipData.itemCount > 0) {
return clipData.getItemAt(0).uri
}
}
return null
}
fun readClipboardIntent(): String {
if (hasPrimaryClip()) {
val clipData = clipboardManager.primaryClip
if (clipData != null && clipData.itemCount > 0) {
val text = clipData.getItemAt(0).intent
return text.toString()
}
}
return ""
}
}
关于小米(读取剪切板权限目前未支持权限询问弹窗,所有应用默认权限状态为“智能允许”。)
剪切板隐私保护功能说明及读写剪切板权限调整说明