0 快速索引表

  • 权限汇总

android.permission.READ_CLIPBOARD_IN_BACKGROUND

android.permission.SET_CLIP_SOURCE

  • 接口汇总

public void setPrimaryClip (ClipData clip)

public void setText (CharSequence text)

public ClipData getPrimaryClip ()

public CharSequence getText ()

public void addPrimaryClipChangedListener (ClipboardManager.OnPrimaryClipChangedListener what)

  • adb命令汇总

adb shell cmd clipboard

  • AppOps汇总

adb shell dumpsys appops --op READ_CLIPBOARD

adb shell dumpsys appops --op WRITE_CLIPBOARD

  • developer

复制和粘贴  |  Android 开发者  |  Android Developers


1 需求

  • 写入剪切板
  • 读取剪切板
  • 监视剪切板

2 权限

android.permission.READ_CLIPBOARD_IN_BACKGROUND

  • android:protectionLevel="signature"
  • @hide Permission that allows background clipboard access.
  • Not for use by third-party applications.

android.permission.SET_CLIP_SOURCE

  • android:protectionLevel="signature|recents"
  • @SystemApi Allows the holder to set the source of the data when setting a clip on the clipboard.
  • @hide

参考资料:

Manifest.permission  |  Android Developers

AndroidManifest.xml - OpenGrok cross reference for /frameworks/base/core/res/AndroidManifest.xml


3 接口

public void setPrimaryClip (ClipData clip)

  • Added in API level 11

public void setText (CharSequence text)

  • Added in API level 11
  • This method is deprecated.

public ClipData getPrimaryClip ()

  • Added in API level 11

public CharSequence getText ()

  • Added in API level 11
  • This method is deprecated.

public void addPrimaryClipChangedListener (ClipboardManager.OnPrimaryClipChangedListener what)

  • Added in API level 11

4 示例

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.dsl.clipboarddemo"><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.ClipboardDemo"><activityandroid:name=".MainActivity"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><EditTextandroid:id="@+id/etWrite"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="Write a message to clipboard" /><Buttonandroid:id="@+id/btnWrite"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="写入剪切板" /><Buttonandroid:id="@+id/btnRead"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="读取剪切板" /><EditTextandroid:id="@+id/etRead"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="read a message from clipboard" /><EditTextandroid:id="@+id/etMonitor"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="monitor clipboard" /></LinearLayout>

MainActivity.java

package com.dsl.clipboarddemo;import android.content.ClipData;
import android.content.ClipboardManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;/*** 权限:* (1)写入剪切板:无* (2)读取剪切板:前台无,后台有,Android Q新增的* <p>* 接口:* (1)写入剪切板:setPrimaryClip()、setText()* (2)读取剪切板:getPrimaryClip()、getText()* (3)监视剪切板:addPrimaryClipChangedListener()* <p>* 验证:adb shell dumpsys appops --op 30* <p>* 参考资料:https://developer.android.google.cn/guide/topics/text/copy-paste*/
public class MainActivity extends AppCompatActivity {private static final String TAG = "MainActivity";EditText etWrite;EditText etRead;EditText etMonitor;Button btnWrite;Button btnRead;ClipboardManager clipboardManager;ClipData clipData;ClipData.Item item;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);etWrite = (EditText) findViewById(R.id.etWrite);etRead = (EditText) findViewById(R.id.etRead);etMonitor = (EditText) findViewById(R.id.etMonitor);btnWrite = (Button) findViewById(R.id.btnWrite);btnRead = (Button) findViewById(R.id.btnRead);clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);btnWrite.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {clipData = ClipData.newPlainText("simple text", etWrite.getText().toString());clipboardManager.setPrimaryClip(clipData);Toast.makeText(MainActivity.this, "已写入剪切板", Toast.LENGTH_SHORT).show();}});btnRead.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {item = clipboardManager.getPrimaryClip().getItemAt(0);etRead.setText(item.getText());}});clipboardManager.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {@Overridepublic void onPrimaryClipChanged() {item = clipboardManager.getPrimaryClip().getItemAt(0);etMonitor.setText(item.getText().toString());Log.i(TAG, "onPrimaryClipChanged: " + item.getText().toString());}});}
}


5 adb shell cmd clipboard

adb shell cmd -l | findstr clip

adb shell cmd clipboard


6 adb shell dumpsys appops

adb shell dumpsys appops --op READ_CLIPBOARD

  • APP_OP_READ_CLIPBOARD = 29;
  • null, // no permission for reading clipboard

adb shell dumpsys appops --op WRITE_CLIPBOARD

  • APP_OP_WRITE_CLIPBOARD = 30;
  • null, // no permission for writing clipboard

参考资料:

AppOpsManager.java - OpenGrok cross reference for /frameworks/base/core/java/android/app/AppOpsManager.java

enums.proto - OpenGrok cross reference for /frameworks/proto_logging/stats/enums/app/enums.proto


7 参考资料

复制和粘贴  |  Android 开发者  |  Android Developers

Android静态安全检查(十三):剪切板使用检测_dmfrm的博客-CSDN博客

安卓监听剪切复制粘贴事件实例_陈蒙_的博客-CSDN博客

关于访问剪贴板可能带来的合规风险预警 - 安全牛

百度安全验证

Android-系统服务-ClipboardManager相关推荐

  1. Android系统服务-WindowManager

    WindowManager是Android中一个重要的服务 (Service ).WindowManager Service 是全局的,是唯一的.它将用户的操作,翻译成为指令,发送给呈现在界面上的各个 ...

  2. android访问网络提示 服务不可用,Android系统服务不可用

    我打算从我的网站获取数据,然后将该信息放入微调器中.我用一些教程,我想出了这个代码Android系统服务不可用 package com.thenewboston.christian; import j ...

  3. Android开发 系统服务,android 系统服务 开发

    <Android系统服务开发>分析了安卓提供的硬件控制机制.编写团队目前均从事相关工作,直接对平台源代码及日志进行分析及测试,介绍了目前尚未普及的安卓平台的硬件控制基本原理及实际框架的劋作 ...

  4. Android 系统服务 - PMS 的启动过程

    相关文章链接: 1. Android Framework - 学习启动篇 2. Android 系统服务 - PMS 的启动过程 相关源码文件: frameworks/base/services/co ...

  5. Android系统服务-简介

    Introduction 我们知道Android系统服务挺多的,做程序时经常会用到,要想把这么多的服务都了解透彻还真不是一两天就能搞定的,首先我们得又有一个框架,脑海里要形成这样的模型,android ...

  6. Android系统服务Fuzz测试

    两年前写的东西,现在发一下.写了个最简单的fuzz脚本:基于adb的fuzzer,仅供学习,请勿作不良用途. 一.背景知识 二.Fuzz原理   Android为用户提供的很多功能是通过系统服务实现的 ...

  7. Android系统服务

    概述 本篇博文主要介绍的是Android中的Java服务. 这部分服务大部分都有一个Manager类,其实就是一个RPC调用,用户通过调用xxxManager的方法,实际上被Binder给迁移到sys ...

  8. android wms各个类的作用,Android系统服务 —— WMS

    "可以毫不夸张的说,Android的framework层主要是由WMS.AMS还有View所构成,这三个模块穿插交互在整个framework中,掌握了它们之间的关系和每一个逻辑步骤,你对fr ...

  9. Android系统服务(SystemService)简介

    什么是SystemService 我们在Android开发过程中经常会用到各种各样的系统管理服务,如进行窗口相关的操作会用到窗口管理服务WindowManager,进行电源相关的操作会用到电源管理服务 ...

  10. Android 系统服务管家servicemanager启动过程详解

    Android考虑到移动设备耗电以及跨进程通信效率等因素,基于OpenBinder专门为进程通信开发了一套框架:binder.例如,客户端程序需要获取WindowManager,TelephonyMa ...

最新文章

  1. 计算机网络基础 — 网络的类型
  2. 【Git】Git 基础命令 ( Git 版本库概念 | 创建版本库 git init | 克隆版本库 git clone )
  3. Pet Shop4解密配置文件
  4. python-3.x-基本数据类型
  5. linux 服务器安装 anaconda
  6. 《乌合之众》读书笔记(part4)--含义最不确定的词语,往往拥有最强大的影响力
  7. 华为硬件工程师社招机考题库_干货:2016年华为中兴硬件工程师笔试题目与经验...
  8. linux捕捉信号sigint失败,为shell布置陷阱:trap捕捉信号方法论
  9. 数据可视化怎么完成的_完成期望后会发生什么:可视化育儿数据
  10. Tornado快速入门
  11. iview tooltip自动消失_实现自动驾驶,为什么要对汽车、行人的轨迹进行预测?它与物体检测、追踪和路径规划间的关系是什么?...
  12. python整型变量化ascii_Python基础之基本数据类型
  13. curl命令操作ElasticSearch
  14. 51单片机 Keil C 延时程序的简单(晶振12MHz,一个机器周期1us.)
  15. 怎么制作电脑动态壁纸 桌面高清动态图怎么做
  16. 100万算大钱还是小钱?
  17. win7 计算机名称 ip6,Win7系统提示ipv6无网络访问权限的两种原因及解决方法
  18. 英语年份怎么读(2008怎么读)
  19. 操作系统及软件常用的日语单词
  20. 3D建模师薪资怎么样? 游戏建模能达到月薪16k+,为什么?

热门文章

  1. 新手怎么购买阿里云服务器【图文教程】
  2. 英伟达RTX 2060发布:《战地5》光追超60帧,349美元(转载自IT之家)
  3. 英语3500词(十三)society主题(2022.1.25)
  4. python打印的时候print(f“*******“) 的括号里的 f‘ ‘ 是什么意思 ?
  5. 实现ecshop一键发货功能的方法
  6. 有选择的忽略PyCharm 3的PEP8语言风格警告提示信息
  7. JS格式化输出常用格式
  8. Vue中使用echarts,echarts 封装以及使用的事项
  9. 7-4 计算e的近似值 (10 分)
  10. X电容Y电容如何选择与使用