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 - 将图像复制到剪贴板,有人得到这个工作吗?的主要内容,如果未能解决你的问题,请参考以下文章