在找了很多解决方案,后面结合起来才解决,不多说直接看代码:
最后的那个回调无用可以不加,重点来了:
需要在application上添加以上代码,是不是很神奇,这样子就解决调用系统分享qq可分享微信不可分享的问题了。
补充下微信直接分享多张图片的方法,微信单张分享可以走微信分享,多张则不支持,这里是走手机自带分享到微信好友的
public static void shareWechatFriend(Context mContext, List<String> paths, String authority) { if (AppUtil.isAppInstalled(mContext, "com.tencent.mm")) { Intent intent = new Intent(); Uri uri = null; ArrayList<Uri> uriList = new ArrayList<>(); for (String path : paths) { //这部分代码主要功能是判断了下文件是否存在,在android版本高过7.0(包括7.0版本) // 当前APP是不能直接向外部应用提供file开头的的文件路径,需要通过FileProvider转换一下。否则在7.0及以上版本手机将直接crash。 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(MediaStore.Images.Media.insertImage(mContext.getContentResolver(), new File(path).getAbsolutePath(), new File(path).getName()+TimeUtil.getCurMilliSecondTimeStamp(), null)); uriList.add(uri); } else { uri = Uri.fromFile(new File(path)); uriList.add(uri); } } catch (FileNotFoundException e) { e.printStackTrace(); } } intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); ComponentName cop = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI"); intent.setComponent(cop); intent.setType("image/*"); intent.setAction(Intent.ACTION_SEND_MULTIPLE); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uriList); mContext.startActivity(Intent.createChooser(intent, "Share")); } else { Toast.makeText(mContext, "您需要安装微信客户端", Toast.LENGTH_LONG).show(); } }
TimeUtil.getCurMilliSecondTimeStamp()是获取当前的时间,精确到毫秒,因为本地存储的同名文件就会在尾巴加(1),一直到(32),超过就会报错,添加为了防止这个问题