Android - 将图像复制到剪贴板,有人得到这个工作吗?

Posted

技术标签:

【中文标题】Android - 将图像复制到剪贴板,有人得到这个工作吗?【英文标题】:Android - Copy image to clipboard, anyone got this working? 【发布时间】:2013-10-30 13:18:03 【问题描述】:

我正在尝试将图像文件从我的 apk 复制到剪贴板。

这是我处理它的方式(粗略地说,我在本地使用内容提供商,这超出了问题的范围。

        ClipboardManager mClipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        ContentValues values = new ContentValues(2);
        values.put(MediaStore.Images.Media.MIME_TYPE, "Image/jpg");
        values.put(MediaStore.Images.Media.DATA, filename.getAbsolutePath());
        ContentResolver theContent = getContentResolver();
        Uri imageUri = theContent.insert(MediaStore.Images.Media.INTERNAL_CONTENT_URI, values);
        ClipData theClip = ClipData.newUri(getContentResolver(), "Image", imageUri);
        mClipboard.setPrimaryClip(theClip);

使用此代码可能会发生两件事:

1) java.lang.IllegalStateException: 无法创建新文件 2) 粘贴时只粘贴 URI 本身,而不是图像(即使在兼容的应用程序中)

我没有看到任何人在 android 上粘贴图像的例子,我已经在谷歌和堆栈溢出上广泛搜索了答案。

有人可以帮忙吗? 我真的很感谢有人在这里提供帮助。

PS:如果不可能,我也想知道,以免浪费更多时间。

谢谢!

【问题讨论】:

【参考方案1】:

我有一个选择。使用应用程序 SwiftKey 作为 Android 上的键盘(它适用于 Android 10)。它允许您访问您的照片库,因此您需要 1)下载图像 2)打开您正在使用的任何应用程序并想要粘贴图像 3)使用您的 SwiftKey 键盘,单击“+”信号,然后“pin”符号(应该在第一行)。 4) 最后,点击“create new”,它会访问您的照片以插入 IN-LINE ANYWHERE。

我知道这不是最好的解决方案,而在 ios 上,您只需点按复制和粘贴即可。但这是唯一对我有用的解决方案。自己试试。我希望这会有所帮助:)

【讨论】:

【参考方案2】:

没有迹象表明 Android 支持此类功能。

行为正确,uri 是复制的数据而不是位图。

这取决于你粘贴的地方是否可以处理这个uri。

【讨论】:

没错。我并不是暗示我希望将位图复制到剪贴板。预期的行为是图像文件的 URI(通过内容提供程序)将被复制到剪贴板,并且相关应用程序将处理 URI > Bitmap 设置。我的问题更符合以前有没有人这样做过。这是可能的,因为本机图库应用程序使用此系统,并且消息传递应用程序处理该 URI 并将其处理成位图以与消息一起发送。 有人有更多建议吗? 访问旧线程。任何人都得到这个工作 - 将图像复制到剪贴板?我正在使用 android 4.3 及更高版本。 Gmail 根本不显示图片,我不知道是 gmail 应用程序还是我的应用程序应该将图像复制到剪贴板。任何帮助将不胜感激 @SherifelKhatib - 谢谢。我将图片存储在私人存储中并试图复制。【参考方案3】:

您不能将其复制到剪贴板,因为这是不可能的; 但是您可以通过将其复制到 sdcard 来做到这一点,然后从您想要的任何地方访问它;

这里有一些代码对我有很大帮助,也可以帮助你:

Context Context = getApplicationContext();
String DestinationFile = "the place that you want copy image there like sdcard/...";
if (!new File(DestinationFile).exists()) 
  try 
    CopyFromAssetsToStorage(Context, "the pictures name in assets folder of your project", DestinationFile);
   catch (IOException e) 
    // TODO Auto-generated catch block
    e.printStackTrace();
  


private void CopyFromAssetsToStorage(Context Context, String SourceFile, String DestinationFile) throws IOException 
  InputStream IS = Context.getAssets().open(SourceFile);
  OutputStream OS = new FileOutputStream(DestinationFile);
  CopyStream(IS, OS);
  OS.flush();
  OS.close();
  IS.close();

private void CopyStream(InputStream Input, OutputStream Output) throws IOException 
  byte[] buffer = new byte[5120];
  int length = Input.read(buffer);
  while (length > 0) 
    Output.write(buffer, 0, length);
    length = Input.read(buffer);
  

【讨论】:

您不能总是假设设备中有 SD 卡。这使得这是一个不可靠的选择。

以上是关于Android - 将图像复制到剪贴板,有人得到这个工作吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jquery 将剪贴板图像复制到网页中

html 将图像复制到剪贴板

异步剪贴板 API“ClipboardItem 未定义” - Reactjs 将图像复制到剪贴板

Android:将文本复制到 API < 11 的剪贴板

如何在颤动中将图像复制到剪贴板

Android 从剪贴板管理器复制/粘贴