Android中数据的复制和粘贴的实现粗解
来源:互联网 发布:seo赚钱培训 编辑:程序博客网 时间:2024/06/07 13:18
通过标题你就可以猜到,本篇博客并不会介绍Android中数据复制和粘贴的源码实现流程、逻辑架构等,我只是根据google提供的文档稍微整理一下,平常基本上是用不到的,有什么不对的地方,劳烦各位大声指出!!
文本的复制和粘贴将由ClipboardManager进行管理(默认的InputView是支持粘贴复制的),它提供多种数据类型的拷贝和粘贴,包括文本、复杂的数据结构、二进制数据流等;其中剪贴板是有系统持有的,剪贴板在同一时刻只能持有一个ClipData,当然一个ClipData里面可以包含过个ClipData.Item,其实真实的数据由ClipData.Item持有的;在使用Intent作为ClipData的数据体时,被粘贴的应用将由于这个Intent指向的应用的快捷键!!!(没有试过)
在Android系统中专门有一个系统服务负责数据的复制和粘贴的,他就是ClipBoardManager,当然了,这个Manager只是对内部的Service进行封装之后暴露给开发者的接口。获取ClipBoardManager的实例对象很简单,Android系统中几乎所有的Manager实例都是通过这种方法获取的:
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
一个ClipData包含一个ClipDescription和至少一个ClipData.Item对象。ClipDescription包含带粘贴的元数据和一个关于有效MIME的数组,ClipData.Item.coerceToText()使用此方法可以强行将剪贴板上的数据转换成一个CharSequence对象,其中Intennt会被转换成一个Intent的URI对象,然后通过使用URI转换成字符串。
复制文本:
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);ClipData clip = ClipData.newPlainText("simple text","Hello, World!");clipboard .setPrimaryClip(clip);
粘贴文本:
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);if(clipboard.hasPrimaryClip() && clipboard.getPrimaryClipDescription().hasMimeType(MIMETYPE_TEXT_PLAIN))){ ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0); pasteData = item.getText();//获取纯文本数据 //Uri pasteUri = item.getUri();//获取URI,然后从根据Uri获取数据}
复制URI:
private static final String CONTACTS = "content://com.example.contacts"; private static final String COPY_PATH = "/copy"; ... ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); Uri copyUri = Uri.parse(CONTACTS + COPY_PATH + "/" + lastName); ClipData clip = ClipData.newUri(getContentResolver(),"URI",copyUri); clipboard .setPrimaryClip(clip);
粘贴URI:
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);if(clipboard.hasPrimaryClip()){ ClipData clip = clipboard.getPrimaryClip(); if (clip != null) { ClipData.Item item = clip.getItemAt(0); Uri pasteUri = item.getUri(); if (pasteUri != null) { String uriMimeType = cr.getType(pasteUri); if (uriMimeType != null) { if (uriMimeType.equals(MIME_TYPE_CONTACT)) { Cursor pasteCursor = cr.query(uri, null, null, null, null); if (pasteCursor != null) { if (pasteCursor.moveToFirst()) { //对获取的数据进行处理,显示或者保存等 } } } pasteCursor.close(); } } }}
复制Intent:
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); Intent appIntent = new Intent(this, com.example.demo.myapplication.class); ClipData clip = ClipData.newIntent("Intent",appIntent); clipboard .setPrimaryClip(clip);
粘贴Intent:
//这个粘贴与纯文本粘贴类似: ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); Intent pasteIntent = clipboard.getPrimaryClip().getItemAt(0).getIntent(); if (pasteIntent != null) { //处理获取到的Intent }
通过使用ContentProvider粘贴复制复杂数据:
需要添加一个用于copy的URI,并将这个URI添加至COntentProvider的getType方法,在ClipData调用newUri方法时会调用getType方法,并将返回的一个String用于表示这个URI表示的MIME。
//以下是源码: static public ClipData newUri(ContentResolver resolver, CharSequence label, Uri uri) { Item item = new Item(uri); String[] mimeTypes = null; if ("content".equals(uri.getScheme())) { String realType = resolver.getType(uri); mimeTypes = resolver.getStreamTypes(uri, "*/*"); if (realType != null) { if (mimeTypes == null) { mimeTypes = new String[] { realType }; } else { String[] tmp = new String[mimeTypes.length + 1]; tmp[0] = realType; System.arraycopy(mimeTypes, 0, tmp, 1, mimeTypes.length); mimeTypes = tmp; } } } if (mimeTypes == null) { mimeTypes = MIMETYPES_TEXT_URILIST; } return new ClipData(label, mimeTypes, item); }
使用ClipboardManager 的注意事项:
1、ClipBorad这同一时刻只能保存一个ClipData,只保存最新的ClipData。2、不要复制多种类型数据的混合体3、在使用ContentProvider最好另外定义一个Uri用以表示copy数据的Uri。4、当MIME检测都不匹配时,可以将内容强制转换成纯文本的内容。
好了,关于Android系统的ClipboardManager就介绍到这里,有兴趣的朋友可以以关注我,遇到问题大家一起讨论一下!!
这是我的微信公众号,如果可以的话,希望您可以帮忙关注一下,这将是对我最大的鼓励了,谢谢!!
- Android中数据的复制和粘贴的实现粗解
- Android复制和粘贴的实现
- Android复制和粘贴的实现
- 复制粘贴的实现
- android 实现剪贴板的粘贴复制
- android的复制粘贴
- 实现文件的复制粘贴
- VB.NET中调用系统的剪贴板完成数据的复制和粘贴
- 利用.NET Framework类库中的Clipboard类,实现数据的复制(剪切)和粘贴
- Android系统剪贴板(ClipboardManager)的使用: 通过代码复制和粘贴数据
- Extjs中EditorGridPanel粘贴Excel复制的数据
- jquery实现密码和确认密码的输入框中不能复制,粘贴,剪切,和右键
- putty的复制和粘贴
- putty的复制和粘贴
- putty的复制和粘贴
- Android实现复制粘贴
- Android的文本和输入---复制和粘贴(一)
- Android的文本和输入---复制和粘贴(二)
- layui弹出iframe
- 400. Nth Digit
- Palindrome Number
- 一个3D引擎Demo 源码
- 人工智能再次战胜人类,强势闯入医疗【智库2861】
- Android中数据的复制和粘贴的实现粗解
- Linux虚拟机上安装jdk1.8.0
- Wget命令参数及使用
- <算法>冒泡排序法
- 蓝桥杯2015年第六届决赛C_C++程序设计本科B组(1. 积分之迷)
- springmvc框架
- 数据中心虚拟化
- POJ--2823--Sliding Window----单调队列问题
- 如何优雅地编写shell脚本