package com.test.androidtest;
import android.content.ClipData;
import android.content.ClipDescription;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
/**
* 剪贴板助手
* Android 3.0(API level 11)引入了对使用ClipboardManager在应用程序内部(之间)进行完全复制和粘贴操作的支持。
* 剪贴板支持文本字符串、URI(通常是指向一个Content Provider项)和Intent(用于复制应用程序的快捷方式)。
* 要想向剪贴板复制一个对象,可以创建一个新的ClipData对象,它包含了一个描述了与待复制对象相关的元数据的ClipDescription、
* 任意数量的ClipData.Item对象。
* 在任意时刻,剪贴板中只能包含一个ClipData对象。复制一个新的对象会替换之前持有的剪贴板对象。
*/
public class ClipBoardHelper {
//粘贴ClipData.Item
public static void SetClipboard(Context context, ClipData.Item item){
ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
//任意剪贴板项的内容也是可以粘贴的,即使应用程序只支持文本。
//使用coerceToText方法,可以将ClipData.Item对象的内容转化为一个字符串。
CharSequence pasteText = item.coerceToText(context);
ClipData newClip = ClipData.newPlainText("Text", pasteText);
clipboard.setPrimaryClip(newClip);
}
//粘贴Intent
public static void SetClipboard(Context context, Intent intent){
ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData newClip = ClipData.newIntent("Intent", intent);
clipboard.setPrimaryClip(newClip);
}
//粘贴URI
public static void SetClipboard(Context context, Uri uri){
ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData newClip = ClipData.newUri(context.getContentResolver(), "URI", uri);
clipboard.setPrimaryClip(newClip);
}
//粘贴String
public static void setClipboard(Context context, String text) {
ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData newClip = ClipData.newPlainText("Text", text);
clipboard.setPrimaryClip(newClip);
}
//获取String
public static String getString(Context context){
ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
//要想访问数据本身,可以使用getItemAt方法,传入你想遍历的项的索引值。
ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);
CharSequence pasteData = item.getText();
return (String)pasteData;
}
//获取URI
public static Uri getUri(Context context){
ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);
Uri pasteUri = item.getUri();
return pasteUri;
}
//获取URI
public static Intent getIntent(Context context){
ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);
Intent pasteIntent = item.getIntent();
return pasteIntent;
}
//判断剪贴板中是否已经复制了数据
public static boolean hasPrimaryClip(Context context){
ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
return clipboard.hasPrimaryClip();
}
//判断剪贴版中数据类型是否为指定的MIME类型
//文本类型:ClipDescription.MIMETYPE_TEXT_PLAIN
//URI类型:ClipDescription.MIMETYPE_TEXT_URILIST
//Intent类型:ClipDescription.MIMETYPE_TEXT_INTENT
private static boolean hasMimeType(Context context, String mimeType){
ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
//获取剪贴板数据中的元数据
ClipDescription cd = clipboard.getPrimaryClipDescription();
//判断剪贴板中的内容是否为mimeType类型
return cd.hasMimeType(mimeType);
}
//判断剪贴版中数据类型是否为文本
public static boolean hasMimeTypePlain(Context context){
return hasMimeType(context, ClipDescription.MIMETYPE_TEXT_PLAIN);
}
//判断剪贴版中数据类型是否为Uri
public static boolean hasMimeTypeUri(Context context){
return hasMimeType(context, ClipDescription.MIMETYPE_TEXT_URILIST);
}
//判断剪贴板中数据类型是否为Intent
public static boolean hasMimeTypeIntent(Context context){
return hasMimeType(context, ClipDescription.MIMETYPE_TEXT_INTENT);
}
}