在Android中使用剪贴板管理器复制和粘贴图像

12

我希望使用剪贴板管理器将我的安卓应用程序中的图像复制到另一个安卓应用程序。我已经做了很多研究并阅读了这个教程,但它没有涉及到图像复制部分。下面的代码可以复制图像,但当我尝试粘贴时,只粘贴了图像的路径。

   ContentValues values = new ContentValues(2);
    values.put(MediaStore.Images.Media.MIME_TYPE, "image/png");
    values.put(MediaStore.Images.Media.DATA, "/mnt/sdcard/1.jpg");
    ContentResolver theContent = getContentResolver();
    Uri imageUri = theContent.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
    ClipData theClip = ClipData.newUri(getContentResolver(), "Image", imageUri);
    mClipboard.setPrimaryClip(theClip);

我尝试在支持图片粘贴的应用程序中粘贴,所以我猜问题出在“复制”操作。

感谢任何回答和建议。


1
你找到解决方案了吗? - dangalg
2个回答

3

这段代码可以运行,只需要找到适合的应用程序和操作系统进行测试。

    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.EXTERNAL_CONTENT_URI, values);
    ClipData theClip = ClipData.newUri(getContentResolver(), "Image", imageUri);
    mClipboard.setPrimaryClip(theClip);

编辑: 根据我的进一步调查,然而,在大多数Android平台上,图像复制粘贴是不可能的,因为原始的Android操作系统没有这个功能。上面的代码只适用于某些修改过的操作系统的情况。 例如,在三星Note平板电脑上它是有效的。你可以在极光办公室中粘贴图片。 但Polaris使用了三星提供的隐藏API,因为该应用程序随设备捆绑。


我尝试使用Gmail应用程序。它粘贴的是图像路径而不是图像本身。我做错了什么吗?如何解决这个问题,请告诉我。 - Akanksha Rathore
@David_O:我尝试了这个方法来获取图像URI,但是当我尝试将其粘贴到Gmail/文本或任何其他应用程序中时,只有URI被粘贴了! 我怎样才能将图像粘贴而不是URI? - user2234
操作系统和应用程序都应该支持这一点。目前只有少数几个操作系统和应用程序支持此功能。他们会更新为新的操作系统,并添加新的API。请查看我的编辑。 - someUser
1
@AkankshaRathore,你实现了图像的复制和粘贴吗?如果是,请告诉我如何实现。 - Mitesh Jobanputra
不工作,兄弟 - undefined

1

这是我的解决方案;它适用于三星Galaxy Note 9:

      Uri uri = FileProvider.getUriForFile(
                this,
                "com.example.android.fileprovider",
                new File(path));
        ClipboardManager mClipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
        ClipData clip = ClipData.newUri(getApplicationContext().getContentResolver(), "a Photo", uri);
        mClipboard.setPrimaryClip(clip);
        Toast.makeText(this,"Image copied to clipboard",Toast.LENGTH_SHORT).show();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接