如何格式化Android clipdata,以便在将图像复制到剪贴板时,它可以作为图像而不仅仅是uri发布

如何格式化Android clipdata,以便在将图像复制到剪贴板时,它可以作为图像而不仅仅是uri发布,android,image,clipboard,clipboardmanager,Android,Image,Clipboard,Clipboardmanager,因此,我已经阅读了有关stackoverflow的文章,没有真正提到如何将实际图像数据复制到剪贴板。我可以将uri复制到剪贴板,如下所示: ContentValues values = new ContentValues(2); values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpg"); values.put(MediaStore.Images.Media.DATA, android.os.Environment.getEx

因此,我已经阅读了有关stackoverflow的文章,没有真正提到如何将实际图像数据复制到剪贴板。我可以将uri复制到剪贴板,如下所示:

  ContentValues values = new ContentValues(2);
  values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpg");
  values.put(MediaStore.Images.Media.DATA, android.os.Environment.getExternalStorageDirectory() + path);
  ContentResolver theContent = getContentResolver();
  Uri  imageUri = theContent.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);  
  ClipData theClip = ClipData.newUri(getContentResolver(),"Image", imageUri);
  ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
  clipboard.setPrimaryClip(theClip);
这让我可以在之后粘贴uri,这在大多数上下文中都是毫无价值的,除非您控制活动

我也可以直接将图像数据发送到目的地,如下所示:

  Intent sendIntent = new Intent(Intent.ACTION_SEND); 
  sendIntent.putExtra(Intent.EXTRA_STREAM, imageUri);
  sendIntent.putExtra("thread_id", (long) 1);
  sendIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
  sendIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  sendIntent.setType("image/*"); 
  startActivity(sendIntent);
虽然这很有用,但我可以清楚地看到,通过进入图库并在下拉列表中选择“复制到剪贴板”,可以将图像粘贴到剪贴板。这让我可以将所说的图像粘贴到messenger、电子邮件、聊天室等。从4.4.2开始,大多数Android浏览器似乎也可以这样做。是否有任何人可以指向我的工作代码或指针,以获取实际复制到键盘上的图像数据,而不仅仅是uri?我可以看出这是可能的,我现在已经没有什么想法了


下面是我正在使用的uri的一个有效示例:content://media/external/images/media/63“

这只是一个想法,但是那些粘贴图像的应用程序可能正在读取URI位置的文件。我认为情况就是这样。我真的没有办法弄清楚uri中添加了什么,以便这些应用程序将链接视为图像。我想我可以在正确复制后查看剪贴板上的内容,看看有什么。我希望这个小项目会更容易你是否尝试过使用
IntentType
中包含的数据?其他应用程序是否使用与类型
“image/*”
相同的分配剪贴板值格式?我发现您根本不必使用剪贴板。您只需将所需的介质通过管道输送到堆栈上运行最快的应用程序中即可。非常类似于您在图像库中找到的共享命令。setType(“image/*”)工作正常。应该用于批量上传,但省去了我拉出文件扩展名的麻烦。