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