微信7.0 intent 微信分享图片 资源失败

在最近项目测试中,今天发现以前一直正常使用的分享图片到微信朋友圈的功能突然用不了了,点击分享到朋友圈时,提示“获取资源失败,无法分享到朋友圈”,测试手机微信是最近一两天刚更新到了微信7.0,以前该功能接口一直使用正常,为了验证这一点,卸载最新版微信,安装回上一微信版本6.7.3,发现图片分享到朋友圈功能接口正常,很明显,微信7.0大版本发布,图片分享到朋友圈的规则也发生了变化,如下是项目中一直以来处理图片分享(多图片)到朋友圈的主要代码(在已安装微信的前提下): /** * 分享图片到微信朋友圈 * @param bmp 分享的图片的Bitmap对象 * @param content 分享内容 */ public void shareImageToWechat(Bitmap bmp, String content) { File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsoluteFile(); String fileName = "share"; File appDir = new File(file, fileName); if (!appDir.exists()) { appDir.mkdirs(); } fileName = System.currentTimeMillis() + ".jpg"; File currentFile = new File(appDir, fileName); FileOutputStream fos = null; try { fos = new FileOutputStream(currentFile); bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos); fos.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fos != null) { fos.close(); } } catch (IOException e) { e.printStackTrace(); } } ArrayList<Uri> uris = new ArrayList<>(); Uri uri = null; try { ApplicationInfo applicationInfo = mContext.getApplicationInfo(); int targetSDK = applicationInfo.targetSdkVersion; if (targetSDK >= Build.VERSION_CODES.N && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { uri = Uri.parse(android.provider.MediaStore.Images.Media.insertImage(mContext.getContentResolver(), currentFile.getAbsolutePath(), fileName, null)); } else { uri = Uri.fromFile(new File(currentFile.getPath())); } uris.add(uri); } catch (Exception ex) { } Intent intent = new Intent(); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); ComponentName comp = new ComponentName(PACKAGE_NAME_WEI_XIN, "com.tencent.mm.ui.tools.ShareToTimeLineUI"); intent.setComponent(comp); intent.setType("image/*"); intent.putExtra("Kdescription", content); intent.setAction(Intent.ACTION_SEND_MULTIPLE); intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); mContext.startActivity(intent); }   排查--系统分享接口正常        在对比使用了系统自带的图片分享到朋友圈功能发现,发现只分享一张图片时,使用系统自带的图片分享到朋友圈的功能在微信7.0也是正常的,通过adb实时查看当前正在运行的Activity,项目中启动朋友圈图片分享Activity的Intent信息: 系统启动朋友圈图片分享的Intent信息:        可以发现,Intent的act以及flag信息有很大的区别,由于flags标志位涉及到较多的标志位组合,暂不排查,重点放在action字段上,对于微信朋友圈的图片分享,这两个action的含义如下:        android.intent.action.SEND_MULTIPLE:支持多张图片分享        android.intent.action.SEND:支持单张图片分享        进一步排查,不禁想,系统的分享支持多图片分享到朋友圈吗?        在系统相册上,只选择一张图片时,点击分享按钮,可以看到“发送到朋友圈”这个选项,按前面说的,图片也是可以正常分享的:        当选择两张及以上张数量的图片时,点击分享按钮,“发送到朋友圈”这个选项已经没有了,只有“发送给朋友”以及“添加到微信收藏”这两个微信相关的分享接口:        当自己把手机上的微信7.0版本卸载,重新装回微信6.7.3版本时,选择两张及以上张数量的图片,点击分享按钮,发现“发送到朋友圈”这个功能出现在了分享选择列表上!!!!!        从系统分享接口这一行为变化上,可以看出,个人猜测,对于使用原生Intent的方式,微信7.0版本进一步收紧了多图片分享到朋友圈的功能,对于图片分享,在微信7.0上只支持单图片分享。 在项目中降级解决        从上面分析可知,对于使用原生Intent的方式微信7.0版本不支持使用多图片分享到朋友圈,针对这种情况,对于微信7.0版本,做降级处理:在微信7.0版本(及以上版本)降级使用单图片处理分享,以下兼容处理后的主要代码: /** * 微信7.0版本号,兼容处理微信7.0版本分享到朋友圈不支持多图片的问题 */ private static final int VERSION_CODE_FOR_WEI_XIN_VER7 = 1380; /** * 微信包名 */ public static final String PACKAGE_NAME_WEI_XIN = "com.tencent.mm"; /** * 分享图片到微信朋友圈 * @param bmp 分享的图片的Bitmap对象 * @param content 分享内容 */ public void shareImageToWechat(Bitmap bmp, String content) { File file = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getAbsoluteFile(); String fileName = "share"; File appDir = new File(file, fileName); if (!appDir.exists()) { appDir.mkdirs(); } fileName = System.currentTimeMillis() + ".jpg"; File currentFile = new File(appDir, fileName); FileOutputStream fos = null; try { fos = new FileOutputStream(currentFile); bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos); fos.flush(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (fos != null) { fos.close(); } } catch (IOException e) { e.printStackTrace(); } } ArrayList<Uri> uris = new ArrayList<>(); Uri uri = null; try { ApplicationInfo applicationInfo = mContext.getApplicationInfo(); int targetSDK = applicationInfo.targetSdkVersion; if (targetSDK >= Build.VERSION_CODES.N && Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { uri = Uri.parse(android.provider.MediaStore.Images.Media.insertImage(mContext.getContentResolver(), currentFile.getAbsolutePath(), fileName, null)); } else { uri = Uri.fromFile(new File(currentFile.getPath())); } uris.add(uri); } catch (Exception ex) { } Intent intent = new Intent(); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); ComponentName comp = new ComponentName(PACKAGE_NAME_WEI_XIN, "com.tencent.mm.ui.tools.ShareToTimeLineUI"); intent.setComponent(comp); intent.setType("image/*"); intent.putExtra("Kdescription", content); if (VersionUtil.getVersionCode(mContext,PACKAGE_NAME_WEI_XIN) < VERSION_CODE_FOR_WEI_XIN_VER7) { // 微信7.0以下版本 intent.setAction(Intent.ACTION_SEND_MULTIPLE); intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); } else { // 微信7.0及以上版本 intent.setAction(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_STREAM, uri); } mContext.startActivity(intent); } public class VersionUtil { /** * 获取制定包名应用的版本的versionCode * @param context * @param * @return */ public static int getVersionCode(Context context,String packageName) { try { PackageManager manager = context.getPackageManager(); PackageInfo info = manager.getPackageInfo(packageName, 0); int version = info.versionCode; return version; } catch (Exception e) { e.printStackTrace(); return 0; } } }         处理后,在微信7.0版本上,项目中单图片可以正常分享到朋友圈了,同时也保留了微信7.0以下版本的多图片处理功能,但由于是单图片分享,进入到微信朋友圈图片分享编辑界面后,在微信7.0以及版本上后面添加图片“+”消失了。        以上是我个人的见解和处理,希望能帮到大家,有不足的地方或有更好方案的朋友可以提出来,一起学习。 ---------------------  作者:CBaymax0111  来源:CSDN  原文:https://blog.csdn.net/okg0111/article/details/86498186  版权声明:本文为博主原创文章,转载请附上博文链接!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容