专栏名称: kimiier
目录
相关文章推荐
左右为篮  ·  震惊!51分惨案!科尔羞愧啊,但莫兰特… ·  2 天前  
野球帝  ·  太香了!卫裤低至39元!冬天必备! ·  3 天前  
丁香妈妈  ·  仅剩 2 小时!超多精美绘本 9.9 秒 ·  6 天前  
左右为篮  ·  哦吼,也是一代牛仔裤战神 ·  6 天前  
51好读  ›  专栏  ›  kimiier

微信图文/多图/小视频分享的那些事

kimiier  · CSDN  ·  · 2021-04-02 10:17

正文

起因来源于一次需求:

  1. 同时分享文字,图片到微信朋友圈
  2. 同时分享文字,多张图片到微信朋友圈
  3. 分享小视频到微信朋友圈

本身觉得是一件简单的事情,正常的一个场景,然而开始实现时,遇坑无数,则开始骂爹骂娘。因为这么正常的一个场景,微信官方竟然不支持。最最重要的是产品拿了样品app,人家确实做到了。

微信分享sdk文档

需求1:同时分享文字,图片到微信朋友圈

首先分析,要做到图文并茂分享到微信朋友圈肯定不是通过微信的分享sdk进行页面跳转的,我们可以试试Intent的形式直接跳转

 public static final void shareImagesToWechatCircleWithActionSend(@NonNull Context paramContext, @NonNull Uri paramUri, @NonNull String paramString) {
        Intent intent = new Intent();
        intent.setComponent(new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI"));
        intent.setType("image/*");
        intent.setAction("android.intent.action.SEND");
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.putExtra("android.intent.extra.STREAM", (Parcelable)paramUri);
        intent.putExtra("Kdescription", paramString);
        intent.putExtra("android.intent.extra.TEXT", paramString);
        intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        paramContext.startActivity(intent);
 }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

paramUri:本地图片的uri
paramString:文本数据

可以发现通过该方式可以直接满足需求1的要求,截图如下:
在这里插入图片描述

需求2:同时分享文字,多张图片到微信朋友圈

这个查阅了很多资料和参考了样品app,确实微信7.0版本之后无法实现一次性分享多张图片到微信朋友圈,7.0之前的可以这里不做说明。而样品app则采用的是辅助功能,下载图片到相册,自动点击+号按钮帮用户自动选取九宫格来变相的实现此需求。于是乎,功能照搬。

脑路模拟:下载图片到相册 —> 进入到微信的分享页面 -> 找到+号按钮,点击 —> 找到弹窗,选中从相册选择 —> 进入到相册页面后,自动帮忙选中前9中图片 —> 最后点击右上角完成 —> 大功告成!!!

!!!万事起源于+号按钮!!!

细心的同学会发现,不论是通过微信分享sdk的方式还是直接intent跳转的方式,进入到微信的朋友圈分享页面是不会显示后面的+号上传按钮的,只有微信用户从朋友圈入口进来才会显示,如图:
在这里插入图片描述
这就涉及到了我的知识盲区了啊,通过adb shell sysdump activity | grep -i run 各种技巧最后发现样品app分享到的微信朋友圈页面的activity和我们先前写的完全不一样,最后总结出一下两个函数供大家使用

	 /**
     * 微信7.0之前的分享页面,可以显示+号按钮,同时支持图片,文字混合
     * @param context
     * @param paramUri
     * @param paramString
     */
    public static final void shareImagesToWechatCircleWithActionView(@NonNull Context context,@NonNull Uri paramUri, @NonNull String paramString) {
        Intent intent = new Intent();
        intent.setComponent(new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareScreenToTimeLineUI"));
        intent.setAction("android.intent.action.VIEW");
        intent.setDataAndType(paramUri, "image/*");
        intent.putExtra("Kdescription", paramString);
        intent.putExtra("android.intent.extra.TEXT", paramString);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        context.startActivity(intent);
  	}

    /**
     * 微信7.0版本之后的分享页面,无法显示+号,支持图片,文字混合
     * @param paramContext
     * @param paramUri
     * @param paramString
     */
    public static final void shareImagesToWechatCircleWithActionSend(@NonNull Context paramContext, @NonNull Uri paramUri, @NonNull String paramString) {
        Intent intent = new Intent();
        intent.setComponent(new ComponentName(WechatConstant.wechatPackageName, WechatConstant.sahreToTimeLineUiClassName));
        intent.setType("image/*");
        intent.setAction("android.intent.action.SEND");
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.putExtra("android.intent.extra.STREAM", (Parcelable)paramUri);
        intent.putExtra("Kdescription", paramString);
        intent.putExtra("android.intent.extra.TEXT", paramString);
        intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
        paramContext.startActivity(intent);
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

在这里插入图片描述
万恶的+号问题终于显示出来,上边的脑路模拟就可以编码实现了。

需求3:分享小视频到微信朋友圈

通过微信分享sdk分享出来的小视频是一个链接形式,用户点击该链接后则跳转开始播放网页视频,而产品需要的是视频流卡片形式。样品app没有实现视频的分享功能,最后确定下来方案是先下载短视频到本地,通过辅助功能自动帮助用户选择短视频。

脑路模拟:下载短视频到相册 —> 进入到微信的分享页面 -> 找到+号按钮,点击 —> 找到弹窗,选中从相册选择 —> 进入到相册页面后,点击顶部的所有视频分类 —> 自动帮忙选中前1个短视频 —> 最后点击右上角完成 —> 大功告成!!!

!!!又是万恶的+号!!!

通过测试发现,如果已经选中了一张图片,往后点击+号只能继续选择图片,无法选中视频。只有把选中的图片都移除掉,才可以选择短视频。

问题二,想要来到微信朋友圈的分享页面,必须要传入imageUri,否则会报错,资源无法加载。

最后采用的方案,是携带一张默认图片,先来到微信朋友圈的分享页面,后通过辅助功能将该张图片移除,最后点击+号开始选中短视频。

1617270957726537