剪贴板——ClipboardManager

作者:追风剑情 发布于:2016-7-29 18:09 分类:Android

  1. package com.test.androidtest;
  2.  
  3. import android.content.ClipData;
  4. import android.content.ClipDescription;
  5. import android.content.ClipboardManager;
  6. import android.content.Context;
  7. import android.content.Intent;
  8. import android.net.Uri;
  9.  
  10. /**
  11. * 剪贴板助手
  12. * Android 3.0(API level 11)引入了对使用ClipboardManager在应用程序内部(之间)进行完全复制和粘贴操作的支持。
  13. * 剪贴板支持文本字符串、URI(通常是指向一个Content Provider项)和Intent(用于复制应用程序的快捷方式)。
  14. * 要想向剪贴板复制一个对象,可以创建一个新的ClipData对象,它包含了一个描述了与待复制对象相关的元数据的ClipDescription、
  15. * 任意数量的ClipData.Item对象。
  16. * 在任意时刻,剪贴板中只能包含一个ClipData对象。复制一个新的对象会替换之前持有的剪贴板对象。
  17. */
  18. public class ClipBoardHelper {
  19. //粘贴ClipData.Item
  20. public static void SetClipboard(Context context, ClipData.Item item){
  21. ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
  22. //任意剪贴板项的内容也是可以粘贴的,即使应用程序只支持文本。
  23. //使用coerceToText方法,可以将ClipData.Item对象的内容转化为一个字符串。
  24. CharSequence pasteText = item.coerceToText(context);
  25. ClipData newClip = ClipData.newPlainText("Text", pasteText);
  26. clipboard.setPrimaryClip(newClip);
  27. }
  28. //粘贴Intent
  29. public static void SetClipboard(Context context, Intent intent){
  30. ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
  31. ClipData newClip = ClipData.newIntent("Intent", intent);
  32. clipboard.setPrimaryClip(newClip);
  33. }
  34. //粘贴URI
  35. public static void SetClipboard(Context context, Uri uri){
  36. ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
  37. ClipData newClip = ClipData.newUri(context.getContentResolver(), "URI", uri);
  38. clipboard.setPrimaryClip(newClip);
  39. }
  40. //粘贴String
  41. public static void setClipboard(Context context, String text) {
  42. ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
  43. ClipData newClip = ClipData.newPlainText("Text", text);
  44. clipboard.setPrimaryClip(newClip);
  45. }
  46. //获取String
  47. public static String getString(Context context){
  48. ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
  49. //要想访问数据本身,可以使用getItemAt方法,传入你想遍历的项的索引值。
  50. ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);
  51. CharSequence pasteData = item.getText();
  52. return (String)pasteData;
  53. }
  54. //获取URI
  55. public static Uri getUri(Context context){
  56. ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
  57. ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);
  58. Uri pasteUri = item.getUri();
  59. return pasteUri;
  60. }
  61. //获取URI
  62. public static Intent getIntent(Context context){
  63. ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
  64. ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);
  65. Intent pasteIntent = item.getIntent();
  66. return pasteIntent;
  67. }
  68. //判断剪贴板中是否已经复制了数据
  69. public static boolean hasPrimaryClip(Context context){
  70. ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
  71. return clipboard.hasPrimaryClip();
  72. }
  73. //判断剪贴版中数据类型是否为指定的MIME类型
  74. //文本类型:ClipDescription.MIMETYPE_TEXT_PLAIN
  75. //URI类型:ClipDescription.MIMETYPE_TEXT_URILIST
  76. //Intent类型:ClipDescription.MIMETYPE_TEXT_INTENT
  77. private static boolean hasMimeType(Context context, String mimeType){
  78. ClipboardManager clipboard = (ClipboardManager)context.getSystemService(Context.CLIPBOARD_SERVICE);
  79. //获取剪贴板数据中的元数据
  80. ClipDescription cd = clipboard.getPrimaryClipDescription();
  81. //判断剪贴板中的内容是否为mimeType类型
  82. return cd.hasMimeType(mimeType);
  83. }
  84. //判断剪贴版中数据类型是否为文本
  85. public static boolean hasMimeTypePlain(Context context){
  86. return hasMimeType(context, ClipDescription.MIMETYPE_TEXT_PLAIN);
  87. }
  88. //判断剪贴版中数据类型是否为Uri
  89. public static boolean hasMimeTypeUri(Context context){
  90. return hasMimeType(context, ClipDescription.MIMETYPE_TEXT_URILIST);
  91. }
  92. //判断剪贴板中数据类型是否为Intent
  93. public static boolean hasMimeTypeIntent(Context context){
  94. return hasMimeType(context, ClipDescription.MIMETYPE_TEXT_INTENT);
  95. }
  96. }

标签: Android

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号