我们知道,windows系统中有剪贴板,Android中也有剪切板(ClipboardManager)
在android api 11之前,ClipboardManager全称(父类):android.text.ClipboardManager
在android api11之后,ClipboardManager全称(子类):android.content.ClipboardManager
早期版本的Android剪切板只能复制文本信息,
在api 11 之后,对ClipboardManager进行了升级,它可以通过(ClipData对象) 复制文本,URI,Intent。所以说android api 11之前版本中的,用来传递的数据使用的setText()和getText()方法被弃用了。,只能用ClipData对象来代替。
使用流程:
1.获取剪切板管理区
ClipboardManager mClipbord=(ClipboardManager)getSystemService(ClipBoard_service);
2.创建能够存入剪贴板的ClipData数据。使用ClipData类的静态方法(ClipData对象中可以包含一个或者多个ClipData.Item对象)
A。创建普通的字符型ClipData : 返回ClipData对象。,数据是text,描述是Lable,MIME类型是MimeType_text_plain
newPlainText(Label,text)
ClipData mclipData=ClipData.newPlainText("Label","Content");
B。 创建URL类型的ClipData
ClipData.newRawUri("Label",Uri.parse(http://www.baidu.com));
C。创建Intent类型的ClipData
ClipData.newIntent("Label",intent);
上面的三种方法只是在ClipData对象中创建了一个ClipData.Item对象,如果想往ClipData对象中添加多个Item项,应该使用ClipData对象的addItem()方法添加。
3.将ClipData数据复制到剪贴板:
clipboardmanager.setPrimaryClip(ClipData对象);
4.从剪贴板中获取ClipData数据:
clipboardmanager.getPrimaryClip();
5.解析ClipData中的数据。
从剪贴板中获得ClipData数据后,
需要把ClipData中的ClipData.Item都取出来呀。
剪贴板中的非text数据可以通过ClipData.Item.coerceToText()方法转为text处理。
第一:检查item项中是不是包含text,如果有,就会返会text数据。
第二,如果不包含text。之后看是否有URI。
如果这个URI是content URI,并且provider返回文字流,coerceToText()就返回该文字流;如果provider不返回文字流,或者这个URI根本不是content URI,coerceText()方法会返回URI的表达式,即 Uri.toString()。
第三,最后,如果这个item即不包含text,也不是URI,。那么它应该包含Intent。coerceToText()方法会把Intent对象转换为一个Intent URI返回,和Intent.toUri(URI_intent_scheme)一样。
一些介绍:
普通字符串,URL,Intent三种数据的使用情况。
(1)普通字符串:就是普通的字符串的剪切,复制,粘贴。
(2)URL:在复制的时候可以复制一个URL。这个URL可以是请求ContentProvider的URL,在粘贴的时候调用ContentProvider获取数据,并使用。
(3)Intent:在记事本应用中长按某一个记录本条目,这时会创建删除这个记事本的Intent。并添加懂啊剪贴板,当用户把这个记事本条目拖扯到垃圾桶时,应用会从剪贴板中获取Intent并执行,这个记事本条目就会被删除。
一些代码:
1.获取剪贴板服务。
ClipboardManager clipboard=(ClipboardManager)getSystemService(Context.clipboard_service);
2.把数据放入到ClipData对象中
text数据(文字)
ClipData clip = ClipData.newPlainText("simple text","hello,world!");
URI数据
private static final String Contacts="content://com.example.contacts";
private static final String Copy_path="/copy";
Uri copyUri=Uri.parse(Contacts+Copy_path+"/"+lastName);
ClipData clip=ClipData.newUri(getContentResolver(),"URI",copyUri);
Intent数据
Intent appIntent=new Intent(this,com.example.demo.myapplication.class);
ClipData clip=ClipData.newIntent("Intent",appIntent);
3.把ClipData对象放入到剪贴板中
clippboardmanamer.setPrimaryclip(clip);
实验的一些截图:
效果截图: