如何使我的分享意图支持whatsapp和google+



我正在使用这个代码来共享一个图像:

File file = ImageLoader.getInstance().getDiskCache().get(imageUrl);
            if (file != null && file.exists()) {
                Uri uri = Uri.fromFile(file);
                Intent intent = new Intent(Intent.ACTION_SEND);
                intent.putExtra(Intent.EXTRA_TEXT, "Hello");
                intent.putExtra(Intent.EXTRA_STREAM, uri);
                intent.setType("image/*");
                intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                context.startActivity(Intent.createChooser(intent, "Send"));
            } else {
                Toast.makeText(context, "Image cannot be shared", Toast.LENGTH_SHORT).show();
            }

我之前使用了ui来加载图像,所以mageLoader.getInstance().getDiskCache().get(imageUrl);从磁盘缓存返回图像文件。

Gmail, Hangouts, Messages, Drive等可以抓取文件,但在Google+上,抓取不到,而Whatsapp说"不支持这种格式"。但是,如果我将文件保存到下载文件夹并通过Gallery应用程序共享,那么Google+和Whatsapp都会选择相同的图像。

您可以尝试将文件保存到外部缓存,它对我有效。Glide:

示例
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("image/*");
Glide.with(getContext())
        .load("http://...url.here...")
        .asBitmap()
        .into(new SimpleTarget<Bitmap>(500, 500) {
            @Override
            public void onResourceReady(Bitmap resource, GlideAnimation glideAnimation) {
                try {
                    File file =  new File(getContext().getExternalCacheDir(), "file_to_share.png");
                    file.getParentFile().mkdirs();
                    FileOutputStream out = new FileOutputStream(file);
                    resource.compress(Bitmap.CompressFormat.PNG, 90, out);
                    out.close();
                    sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
                    sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                    getContext().startActivity(Intent.createChooser(sendIntent, ""));
                } catch (IOException e) {
                    Log.e("Share", e.getMessage(), e);
                } finally {
                }
            }
        });

如果您正在使用通用图像加载器,我应用了接受的答案来保存图像,并在用户分享回来后立即删除它:

private File saveImage(String imageUri, String fileName) {
        File file = new File(this.getExternalCacheDir(), fileName);
        InputStream sourceStream = null;
        File cachedImage = ImageLoader.getInstance().getDiskCache().get(imageUri);
        if (cachedImage != null && cachedImage.exists()) {
            Log.d(TAG, "Cache exists");
            try {
                sourceStream = new FileInputStream(cachedImage);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
        } else {
            Log.d(TAG, "Cache doesn't exist");
        }
        if (sourceStream != null) {
            Log.d(TAG, "SourceStream is not null");
            try {
                OutputStream targetStram = new FileOutputStream(file);
                try {
                    try {
                        IoUtils.copyStream(sourceStream, targetStram, null);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                } finally {
                    try {
                        targetStram.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } finally {
                try {
                    sourceStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        } else {
            Log.d(TAG, "SourceStream is null");
            Toast.makeText(this, "Image cannot be shared", Toast.LENGTH_SHORT).show();
        }
        return file;
    }
 private void shareImage(String imageUrl, String fileName) {
         if (isSDReadableWritable()) {
             file = saveImage(imageUrl, fileName);
             Uri uri = Uri.fromFile(file);
             Intent intent = new Intent(Intent.ACTION_SEND);
             intent.putExtra(Intent.EXTRA_TEXT, "Hello");
             intent.putExtra(Intent.EXTRA_STREAM, uri);
             intent.setType("image/*");
             intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
             intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
             startActivityForResult(Intent.createChooser(intent, "Send"), 20);
         } else {
             Toast.makeText(this, "Storage cannot be accessed", Toast.LENGTH_SHORT).show();
         }
 }

要删除文件,只需覆盖onActivityResult,它将在共享后立即删除

@Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == 20 && file != null) {
            boolean isDelete = file.delete();
            Log.d(TAG, "isDelete is " + isDelete);
        }
     }

最新更新