Android share image on snapchat

时光毁灭记忆、已成空白 提交于 2019-12-10 11:17:35

问题


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.


回答1:


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



回答2:


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.



来源:https://stackoverflow.com/questions/37507693/android-share-image-on-snapchat

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!