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

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

完整开源地址:https://docs.qq.com/doc/DSkNLaERkbnFoS0ZF

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

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

OpenSDK支持FileProvider方式分享文件到微信官方:https://developers.weixin.qq.com/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));

            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

有具体的代码。

QQ篇


分享功能存储权限适配官方文档: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>



微博篇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值