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

cigdeys3  于 2022-11-03  发布在  Android
关注(0)|答案(4)|浏览(131)

我试图从我的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:如果这是不可能做到的,我也想知道,以保存浪费更多的时间在这上面。
谢谢你!

p1iqtdky

p1iqtdky1#

我有一个选择。使用应用程序SwiftKey作为您的Android键盘(它在Android 10上工作)。它允许你访问你的照片库,所以你需要1)下载图像2)打开你正在使用的任何应用程序,想要粘贴图像3)使用你的SwiftKey键盘,点击“+”信号,然后点击“pin”符号(应该在第一行)。4)最后,点击“新建”,它将访问您的照片插入在线任何地方。
我知道这不是最好的解决方案,而在iOS上,你可以点击复制和粘贴。但这是唯一的解决方案,为我工作。尝试为自己。我希望这有助于:)

r6vfmomb

r6vfmomb2#

没有迹象表明Android支持此类功能。
该行为是正确的,并且URI是复制的数据而不是位图。
这取决于您要粘贴的位置是否可以处理此uri。

8ehkhllq

8ehkhllq3#

OP的问题是

values.put(MediaStore.Images.Media.MIME_TYPE, "Image/jpg");

这是无效的MIME类型。它应该是

values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
vptzau2j

vptzau2j4#

你不能复制到剪贴板,因为这是不可能;但你可以通过复制到SD卡,然后从任何你想要的地方访问它;
下面是一些对我有很大帮助的代码,也可以帮助你:

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);
  }
}

相关问题