【问题标题】:Cannot share images to WeChat and Line using ACTION_SEND intent无法使用 ACTION_SEND 意图将图像分享到微信和 Line
【发布时间】:2015-05-27 14:01:39
【问题描述】:

我的代码如下 -

 Intent prototype = new Intent(Intent.ACTION_SEND);
 prototype.setData(uri);   // uri is of the image file
 prototype.setType(image/*);
 prototype.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);

 prototype.putExtra(Intent.EXTRA_STREAM, uri); 

List<ResolveInfo> resInfo = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
       if (!resInfo.isEmpty()) 
       { 
           for (ResolveInfo resolveInfo : resInfo) 
            {
                if (resolveInfo.activityInfo == null)  
                {
                    continue; 
                }

                // Retrieve the package name and class name to populate the chooser intent
                Intent intent = (Intent) prototype.clone();
                String packageName = resolveInfo.activityInfo.packageName;
                intent.setPackage(packageName); 
                intent.setClassName(packageName, resolveInfo.activityInfo.name); 
            targetedIntents.add(intent);
        }}
            Intent chooserIntent = Intent.createChooser(topIntents.remove(targetedIntents.size() - 1), chooserTitle); 
                chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedIntents.toArray(new Parcelable[] {})); 

当我从选择器中选择微信和 Line 应用程序时,没有任何反应。 Line 应用程序仅显示无法共享的错误。微信不给任何消息。使用我的代码在 Whatsapp 和环聊上共享工作正常。

我们可以在微信和 Line from Gallery 上分享图片。这是如何运作的?这不是发送操作意图吗?

【问题讨论】:

  • “我的代码如下”——不,不是,因为该代码无法编译。 “这是如何运作的?” --ACTION_SEND。你的Uri 是什么?既然您使用的是FLAG_GRANT_READ_URI_PERMISSION,那么您是使用FileProvider 还是实现自己的流式传输ContentProvider
  • 嗨@CommonsWare,我正在实现自己的内容提供程序。由于我的代码是专有的,我不能完整地发布它。 Uri 的格式为 content://.... 并且图像存储在我的应用程序目录中。奇怪的是,我的代码在 Hangouts、Whatsapp、FB messenger 上运行,但在微信和 Line 上运行失败。我也在我的代码中使用 ACTION_SEND 意图,但是共享对我不起作用而对画廊起作用的原因是什么。
  • 您可以尝试在您的ContentProvider 中将my LegacyCompatCursorWrapper 混合到您的query() 方法中,或者尝试实现this pattern 以处理一些编写不佳的流ContentProvider 客户端。
  • 上述模式对我不起作用。我的光标已经有一个列名 MediaStore.MediaColumns.DATA 即 _data。如果我将文件存储在 SDCard 中,则可以共享图像而不会出现任何故障。但出于隐私原因,我想将其存储在我的应用程序文件夹中。
  • 有这方面的消息吗?直到今天,无论是线路还是微信都在使用 FileProvider

标签: android android-intent wechat


【解决方案1】:

我遇到了同样的问题,所以我实现了以下内容:

shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_SUBJECT,sharesubject);
shareIntent.putExtra(Intent.EXTRA_TEXT, sharetext);
shareIntent.setType("image/jpeg");
shareIntent.putExtra(Intent.EXTRA_STREAM,Uri.fromFile(destination));
shareIntent.setPackage(info.activityInfo.packageName);

//destination 是包含要共享的图像的文件的名称。

注意:这仅适用于 api 23 及以下版本。

【讨论】:

    【解决方案2】:

    ShareCompat 建立共享意图对我有用

    val shareIntent = ShareCompat.IntentBuilder(context)
        .setType(context.contentResolver.getType(uri))
        .setStream(uri)
        .setText(text)
        .intent
        .apply { addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) }
    
    startActivity(Intent.createChooser(shareIntent, "chooserTitle")
    

    我猜重点是

    mIntent.putExtra(EXTRA_CALLING_PACKAGE, launchingContext.getPackageName());
    

    ShareCompat.IntentBuilder(Context)中指定

    【讨论】:

      猜你喜欢
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 2015-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多