Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Copy-Paste image in Android using Clipboard Manager

I would like to copy image from my android application to the other android application using clipboard manager. I have researched a lot and read this tutorial but it doesn't cover the image copying part. The below code which copies image but when I am trying to paste, only the image's path is pasted.

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

I tried to past in apps which support image pasting, so I guess the problem is "copy". Any answers and advises would be appreciated.

like image 901
user2215256 Avatar asked Mar 27 '13 11:03

user2215256


2 Answers

This code works, just find appropriate app and OS to test it.

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

Edit: According to my further investigations, however, in most of Android platforms the image copy past is not possible because original android OS does not have such a feature. The code above works only for several cases where the OS is modified. For example, in Samsung Note tablet it works. And you can past the image in Polaris office. But Polaris is used the hidden API provided by Samsung, as that app comes with devices.

like image 76
someUser Avatar answered Nov 19 '22 18:11

someUser


Here is my solution; it works on Samsung 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();
like image 27
nguyentathung943 Avatar answered Nov 19 '22 18:11

nguyentathung943