Android上的Android分享图片

时间:2016-05-29 08:18:11

标签: android android-intent share instagram snapchat

我正在使用此代码分享分数的屏幕截图:

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

它适用于Whatsapp Twitter等,但当我使用“imgae / jpeg”类型时,也不适用于Snapchat和Instagram。它导致错误“选择的图像无法打开”。我怎样才能为Snapchat和Instagram做这项工作。

2 个答案:

答案 0 :(得分:2)

问题是,我将屏幕截图保存到SD卡,但Snapchat没有从外部存储读取文件的权限。我不得不使用只能由我的应用程序加入的应用程序目录,并且必须使用我自己的fileprovider(com.test.fileprovider)更改权限,以便Snapchat可以访问它。这是代码:

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

答案 1 :(得分:0)

我在Instagram上使用此代码并且工作正常:

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

我希望这段代码可以帮到你。