📜  Android-剪贴板(1)

📅  最后修改于: 2023-12-03 15:13:21.986000             🧑  作者: Mango

Android 剪贴板

概述

Android 中的剪贴板(Clipboard)是用来存储和共享数据的公共区域,在应用程序之间传递文字、图像或者其他数据非常方便。

Android 剪贴板分为两种类型:纯文本剪贴板和 Uri 类型剪贴板。其中纯文本剪贴板主要用于传递文本数据,而 Uri 类型剪贴板则可以用于传递文件、链接等数据。

使用
获取系统剪贴板

在 Android 中,我们可以通过如下语句获取系统剪切板:

ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
复制数据

复制数据至剪贴板:

// 将纯文本数据复制到剪贴板
ClipData clipData = ClipData.newPlainText("text", "Hello, world!");
clipboard.setPrimaryClip(clipData);

// 将 Uri 数据复制到剪贴板
ClipData uriClipData = ClipData.newUri(getContentResolver(), "uri", Uri.parse("http://www.google.com"));
clipboard.setPrimaryClip(uriClipData);
粘贴数据

获取剪贴板中的数据:

// 获取第一条纯文本数据
ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);
String text = item.getText().toString();

// 获取第一条 Uri 数据
ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);
String uriString = item.getUri().toString();
监听剪贴板

如下代码可以注册一个剪贴板监听器,并在剪贴板内容变化时触发相应的回调:

clipboard.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
    @Override
    public void onPrimaryClipChanged() {
        // 剪贴板内容发生改变时
    }
});
注意事项
  • 在 Android 11(API 级别 30)及以上版本中,访问剪切板需要在 AndroidManifest.xml 文件中添加权限声明,并且需要在运行时动态申请权限:

    <uses-permission android:name="android.permission.READ_CLIPBOARD_IN_BACKGROUND" />
    
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        if (!Environment.isExternalStorageManager()) {
            Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
            Uri uri = Uri.fromParts("package", getPackageName(), null);
            intent.setData(uri);
            startActivity(intent);
        }
     }
    
  • 在 Android 11(API 级别 30)及以上版本中,即使应用程序没有焦点,也可以在前台访问剪贴板。如果你需要在后台访问剪贴板,请在 AndroidManifest.xml 文件中声明权限:

    <uses-permission android:name="android.permission.READ_CLIPBOARD_IN_BACKGROUND" />