2

当我点击分享按钮时,我无法在社交媒体上分享图片。它显示了Toast

不支持文件格式

public void onBindViewHolder(final ViewHolder holder, int position) {
         upload = uploads.get(position);

       holder.textViewName.setText(upload.getName());
       final String imageUrl=upload.getUrl();


        Glide.with(context).load(imageUrl).into(holder.imageView);
        
        final Uri imageUri=Uri.parse("https://firebasestorage.googleapis.com/v0/b/memories-project.appspot.com/o/uploads%2FnCfBZThQykf3Ur9oNzHyEHS1DEp2%2F45007?alt=media&token=9ae17594-13ff-40f6-98f9-aff80ab2fdf4");
        holder.shareImage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(context,imageUrl,Toast.LENGTH_SHORT).show();
                Intent shareIntent = new Intent();
                shareIntent.setAction(Intent.ACTION_SEND);
                shareIntent.setType("image/*");

                shareIntent.putExtra(Intent.EXTRA_STREAM,imageUri);
           
                shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
                try {
                    context.startActivity(Intent.createChooser(shareIntent, "Share image File"));
                } catch (android.content.ActivityNotFoundException ex) {

                }
            }
        });
    }

我将图像存储到firebase. 现在我从 firebase 获取链接并解析为 URI,但我不知道为什么会这样。

我只是为了测试目的对 URL 进行了硬编码。

对于 WhatsApp:

不支持文件格式

对于 Instagram:

图片无法加载

对于脸书:

什么都不显示意味着没有吐司或任何东西(只是显示状态栏)

对于信使:

未打开

4

1 回答 1

3

引用文档EXTRA_STREAM应该指向“content:持有与 相关的数据流的 URI Intent,用于提供ACTION_SEND正在发送的数据。”

您正在提供https Uri,而其他应用程序不会期待它。无论如何,并非所有可能支持的应用程序ACTION_SEND都会获得INTERNET许可。

如果您想共享某些内容,通常需要在设备上本地并FileProvider通过ContentProvider. 在 Android 7.0 之前,file指向外部存储文件的方案通常也可以正常工作。

于 2017-08-17T20:32:55.923 回答