JingBin's Home

Android 系统剪贴板的使用 - 复制、获取和清空

  • ClipboardManager: 表示一个剪贴板
  • ClipData: 剪贴板中保存的所有剪贴数据集(剪贴板可同时复制/保存多条多种数据条目)
  • ClipData.Item: 剪贴数据集中的一个数据条目

复制内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 实现文本复制功能
*
* @param content 复制的文本
*/
public static void copy(String content) {
if (!TextUtils.isEmpty(content)) {
// 得到剪贴板管理器
ClipboardManager cmb = (ClipboardManager) CloudReaderApplication.getInstance().getSystemService(Context.CLIPBOARD_SERVICE);
cmb.setText(content.trim());
// 创建一个剪贴数据集,包含一个普通文本数据条目(需要复制的数据)
ClipData clipData = ClipData.newPlainText(null, content);
// 把数据集设置(复制)到剪贴板
cmb.setPrimaryClip(clipData);
}
}

获取系统剪贴板内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 获取系统剪贴板内容
*/
public static String getClipContent() {
ClipboardManager manager = (ClipboardManager) CloudReaderApplication.getInstance().getSystemService(Context.CLIPBOARD_SERVICE);
if (manager != null) {
if (manager.hasPrimaryClip() && manager.getPrimaryClip().getItemCount() > 0) {
CharSequence addedText = manager.getPrimaryClip().getItemAt(0).getText();
String addedTextString = String.valueOf(addedText);
if (!TextUtils.isEmpty(addedTextString)) {
return addedTextString;
}
}
}
return "";
}

清空剪贴板内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
* 清空剪贴板内容
*/
public static void clearClipboard() {
ClipboardManager manager = (ClipboardManager) CloudReaderApplication.getInstance().getSystemService(Context.CLIPBOARD_SERVICE);
if (manager != null) {
try {
manager.setPrimaryClip(manager.getPrimaryClip());
manager.setText(null);
} catch (Exception e) {
DebugUtil.error(e.getMessage());
}
}
}

剪贴板的数据改变监听

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 获取系统剪贴板
ClipboardManager clipboard = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
// 添加剪贴板数据改变监听器
clipboard.addPrimaryClipChangedListener(new ClipboardManager.OnPrimaryClipChangedListener() {
@Override
public void onPrimaryClipChanged() {
// 剪贴板中的数据被改变,此方法将被回调
System.out.println("onPrimaryClipChanged()");
}
});
// 移除指定的剪贴板数据改变监听器
// clipboard.removePrimaryClipChangedListener(listener);