【问题标题】:Android - Copy image to clipboard, anyone got this working?Android - 将图像复制到剪贴板,有人得到这个工作吗?
【发布时间】: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:如果不可能,我也想知道,以免浪费更多时间。

谢谢!

【问题讨论】:

    标签: java android image clipboard pasteboard


    【解决方案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 卡。这使得这是一个不可靠的选择。
      猜你喜欢
      • 1970-01-01
      • 2023-03-11
      • 2021-07-27
      • 2021-01-14
      • 2011-04-19
      • 2011-09-04
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多