Android - 将图像复制到剪贴板,任何人都有这个工作?

时间:2013-10-30 13:18:03

标签: java android image clipboard pasteboard

我正在尝试将图像文件从我的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:如果不可能,我也想知道,为了节省浪费时间。

谢谢!

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:-1)

你无法将其复制到剪贴板,因为它是不可能的; 但你可以通过将其复制到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);
  }
}