《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
完整开源地址:https://docs.qq.com/doc/DSkNLaERkbnFoS0ZF
然后并没有什么用,依旧有问题!
然后在官网上有发现了一个地址:
这次是对了,照着进行适配即可;
注意点
1.String filePath = context.getExternalFilesDir(null) + “/shareData/test.png”;
// 该filePath对应于xml/file_provider_paths里的第一行配置:,因此才可被共享
这里有一行说明,在对应xml 配置里面下面的路径要写在第一行
<external-files-path name="sharedata" path="shareData/"/>
2.将路径通过FileProvider的接口转换成content://URI形式,这里的说明,因为写不对或者文件处理有问题会导致分享为黑图
即如果你分享微信用的是:mWXImageObject.imagePath = xxxxx;
这个方法,那需要注意这个路径必须是上面获取的content://URI的形式,当然这个路径需要对图片进行存储操作的,不然文件为空,分享出去是黑屏
public static String dealAndroid11FileWechat(Context context, Bitmap mBmp, File fileFilePri) {
try {
if (mBmp == null) {
return null;
}
BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(fileFilePri));
mBmp.compress(Bitmap.CompressFormat.JPEG, 90, outputStream);
outputStream.flush();
outputStream.close();
// 微信使用contentPath作为文件路径进行分享
return CommonUtils.getWeiChartFileUri(context, fileFilePri);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static String getWeiChartFileUri(Context context, File file) {
if (file == null || !file.exists()) {
return null;
}
Uri contentUri = FileProvider.getUriForFile(context,
context.getPackageName() + ".fileprovider", // 要与`AndroidManifest.xml`里配置的`authorities`一致,假设你的应用包名为com.example.app
file);
// 授权给微信访问路径
context.grantUriPermission("com.tencent.mm", // 这里填微信包名
contentUri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
return contentUri.toString(); // contentUri.toString() 即是以"content://"开头的用于共享的路径
}
相关说明,上面中的 checkVersionValid,checkAndroidNotBelowN 这2个方法,微信官方文档里面有,就不列上去了,方法一 是对分区缓存文件的存储,方法二是获取 content 开头的路径,我这里加了一个 android11Path 这个变量存储 ,确保 `mWXImageObject.imagePath = android11Path,至于其他的非分区的文件存储还是以前的逻辑.最终分享的时候,自行判断 imagePath 是取content 开头,还是非分区的文件路径,到这里微信Android 11 分享处理完毕了。
因为 各自的分享整合的逻辑不一致,所以我就不贴具体的分享代码了,在现有逻辑上 去Android11Path ,还是以前的path ,实在不行:分享异常,Android 11及以上系统需使用FileProvider方式分享 微信分享失败(不讲码德),请参考:https://www.jianshu.com/p/05c83a83d876
有具体的代码。
分享功能存储权限适配官方文档:https://wiki.connect.qq.com
QQ 适配起来就很顺畅,没啥大问题,赞!,FileProvider 和微信用一个xml 注意加的位置就行
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${PACKAGE_NAME}.fileprovider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>