Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android share image on snapchat

I'm using this code to share a screenshot of the score:

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
        sharingIntent.setType("image/png");
        Uri image = Uri.parse(Environment.getExternalStorageDirectory().toString() + "/sharescore.png");
        try {
            // create bitmap screen capture
            View v1 = v.getRootView();
            v1.setDrawingCacheEnabled(true);
            Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
            v1.setDrawingCacheEnabled(false);

            File imageFile = new File(image.getPath());

            FileOutputStream outputStream = new FileOutputStream(imageFile);
            int quality = 100;
            bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
            outputStream.flush();
            outputStream.close();
        } catch (Throwable e) {
            // Several error may come out with file handling or OOM
            e.printStackTrace();
        }
        sharingIntent.putExtra(Intent.EXTRA_STREAM, image);
        startActivity(Intent.createChooser(sharingIntent, getString(R.string.share_via)));

It works fine for Whatsapp Twitter etc but not for snapchat and Instagram also when I use the "imgae/jpeg" type. It results in the error "selected image cant be opened". How can I make this work for snapchat and instagram.

like image 958
cmtut Avatar asked Oct 18 '25 14:10

cmtut


2 Answers

They Problem was, that I saved the screenshot to the sd-card, but snapchat doesnt have the permission to read files from the external storage. I had to use the app Directory that can only be accesed by my app and had to change the permissions with my own fileprovider (com.test.fileprovider) so that snapchat can acess it. Here is the Code:

Intent sharingIntent = new Intent(Intent.ACTION_SEND);
        sharingIntent.setType("image/jpg");
        sharingIntent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        File newFile = new File(getContext().getCacheDir(), "share_score.jpg");
        Log.d(getClass().getSimpleName(), newFile.getAbsolutePath());
        Uri image = FileProvider.getUriForFile(getContext(), "com.test.fileprovider", newFile);
        try {
            // create bitmap screen capture
            View v1 = v.getRootView();
            v1.setDrawingCacheEnabled(true);
            Bitmap bitmap = Bitmap.createBitmap(v1.getDrawingCache());
            v1.setDrawingCacheEnabled(false);

            FileOutputStream outputStream = new FileOutputStream(newFile);
            int quality = 100;
            bitmap.compress(Bitmap.CompressFormat.JPEG, quality, outputStream);
            outputStream.flush();
            outputStream.close();
        } catch (Throwable e) {
            // Several error may come out with file handling or OOM
            e.printStackTrace();
        }
        sharingIntent.putExtra(Intent.EXTRA_STREAM, image);
        startActivity(Intent.createChooser(sharingIntent, getString(R.string.share_via)));
like image 100
cmtut Avatar answered Oct 21 '25 03:10

cmtut


Im using this code for Instagram and works fine:

AssetManager assetFiles = getAssets();
InputStream istr = null;
Bitmap image = null;

try {
    istr = assetFiles.open("img.jpg");
} catch (IOException e) {
    e.printStackTrace();
}

image = BitmapFactory.decodeStream(istr);

String pathofBmp = MediaStore.Images.Media.insertImage(getContentResolver(), image, "Share Text", null);
Uri bmpUri = Uri.parse(pathofBmp);

Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "Share Text");
sendIntent.setType("image/png");
sendIntent.putExtra(Intent.EXTRA_STREAM, bmpUri);
sendIntent.setPackage("com.instagram.android");
startActivity(sendIntent);

I hope this snippet help you.

like image 25
Talu Avatar answered Oct 21 '25 03:10

Talu



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!