100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Android 11 微信 QQ 微博 分享适配

Android 11 微信 QQ 微博 分享适配

时间:2018-11-03 20:39:18

相关推荐

Android 11 微信 QQ  微博 分享适配

Android 11 微信,QQ ,微博 分享适配

前言微信篇QQ篇微博篇

前言

最近收到客服反馈 有用户反馈微信分享不了,具体询问一番发现是Android 11的小米机器,然后依次试了 QQ 微博同样不行,于是着手进行适配工作,最新的Android 11 进行了分区存储,在升级到tagsdk=30的时候,我也试了一下,发现好多第三方都不行了,所以任用tagsdk=29

FileProvider 官网适配说明,帮助了解相关代码的含义:https://developer./reference/kotlin/androidx/core/content/FileProvider

微信篇

微信官方说明相关连接如下:https://developers./doc/oplatform/Mobile_App/Access_Guide/Android.html#jump2

然后并没有什么用,依旧有问题!

然后在官网上有发现了一个地址:

OpenSDK支持FileProvider方式分享文件到微信官方:https://developers./community/develop/doc/0004886026c1a8402d2a040ee5b401

这次是对了,照着进行适配即可;

注意点

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));press(pressFormat.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.appfile);// 授权给微信访问路径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方式分享 微信分享失败(不讲码德),请参考:/p/05c83a83d876

有具体的代码。

QQ篇

分享功能存储权限适配官方文档:https://wiki.

QQ 适配起来就很顺畅,没啥大问题,赞!,FileProvider 和微信用一个xml 注意加的位置就行

<providerandroid:name="androidx.core.content.FileProvider"android:authorities="${PACKAGE_NAME}.fileprovider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths" /></provider>

微博篇

sinaweibosdk/weibo_android_sdk,github 地址:/sinaweibosdk/weibo_android_sdk

具体的适配在这个目录下面有pdf 文档,适配起来还是挺顺畅的,因为我没有多图分享,微博多图分享,如下逻辑,但是我没有在文档里面看到相关配置信息 getExternalFilesDir(null) 这个在一点配置说明,就很尴尬!!!!

if (mShareMultiImage.isChecked()) {// 分享多图MultiImageObject multiImageObject = new MultiImageObject();ArrayList<Uri> list = new ArrayList<>();if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {String authority = this.getPackageName() + ".fileprovider";list.add(FileProvider.getUriForFile(this, authority, new File(getExternalFilesDir(null) + "/aaa.png")));list.add(FileProvider.getUriForFile(this, authority, new File(getExternalFilesDir(null) + "/ccc.JPG")));list.add(FileProvider.getUriForFile(this, authority, new File(getExternalFilesDir(null) + "/ddd.jpg")));list.add(FileProvider.getUriForFile(this, authority, new File(getExternalFilesDir(null) + "/fff.jpg")));list.add(FileProvider.getUriForFile(this, authority, new File(getExternalFilesDir(null) + "/ggg.JPG")));list.add(FileProvider.getUriForFile(this, authority, new File(getExternalFilesDir(null) + "/eee.jpg")));list.add(FileProvider.getUriForFile(this, authority, new File(getExternalFilesDir(null) + "/hhhh.jpg")));list.add(FileProvider.getUriForFile(this, authority, new File(getExternalFilesDir(null) + "/kkk.JPG")));} else {list.add(Uri.fromFile(new File(getExternalFilesDir(null) + "/aaa.png")));list.add(Uri.fromFile(new File(getExternalFilesDir(null) + "/ccc.JPG")));list.add(Uri.fromFile(new File(getExternalFilesDir(null) + "/ddd.jpg")));list.add(Uri.fromFile(new File(getExternalFilesDir(null) + "/fff.jpg")));list.add(Uri.fromFile(new File(getExternalFilesDir(null) + "/ggg.JPG")));list.add(Uri.fromFile(new File(getExternalFilesDir(null) + "/eee.jpg")));list.add(Uri.fromFile(new File(getExternalFilesDir(null) + "/hhhh.jpg")));list.add(Uri.fromFile(new File(getExternalFilesDir(null) + "/kkk.JPG")));}multiImageObject.imageList = list;message.multiImageObject = multiImageObject;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。