Android app分享文件到微信

本文介绍了在Android应用中将文件分享到微信的两种方案:1) 使用WXFileObject构造分享方法,需要接入微信SDK并配置FileProvider;2) 调用系统分享功能,不依赖微信SDK。在Android 11及以上版本,使用FileProvider分享是必要的,因为直接设置fileData在大文件分享时存在限制。
摘要由CSDN通过智能技术生成

两种实现方案:

1.使用WXFileObject构造分享方法发送到微信;
2.调用系统分享方法,把文件直接发送到微信;

那么下面来分别看看怎么实现:

〇、准备工作

首先,需要在AndroidManifest.xml中配置FileProvider信息,以适配10以后版本文件读取问题

AndroidManifest.xml

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

file_paths.xml

<paths>
    <external-path
        name="external_files"
        path="." />
</paths>
一、使用WXFileObject构造分享方法发送到微信

这种方式分享需要接入微信分享的SDK,分享到微信后可以显示来源。但是官方文档中没有WXFileObject的示例,所以这里贴一段自己写的方法给大家做参考,其他分享类型可以参考官方文档(https://developers.weixin.qq.com/doc/oplatform/Mobile_App/Share_and_Favorites/Android.html

ShareUtils.java

	public static final  String PACKAGE_WECHAT = "com.tencent.mm";
	
	/**
     * 分享文件到微信好友 by WXAPI
     *
     * @param thumbId 分享到微信显示的图标
     */
    public static void shareFileToWechat(Context context, File file, int thumbId) {
   
   	 	if (!isInstallApp(context, ShareUtils.PACKAGE_WECHAT)) {
   
            Toast.makeText(context, "您需要安装微信客户端", Toast.LENGTH_LONG).show();
            return;
        }
        //ANDROID 11上微信分享得走FileProvider
        Log.d("share", "SDK_INT=" + Build.VERSION.SDK_INT);
        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) {
   
            shareWechatFriend(context, file);
            return;
        }
        //构建发送文件体
        WXFileObject fileObject = new WXFileObject();
        /*经实测,不给fileObject设置fileData,也是可以分享文件得,且大小默认10M以内
        反而是设置了fileData属性的话,分享文件大小不能大于500kb,且在Android11以上无法分享,坑啊,
        所以,在Android11上需要走FileProvider文件分享的方式*/
        //设置需要发送的文件byte[] 
        //byte[] fileBytes = readFile(file);
        //fileObject.setFileData(fileBytes);
        fileObject.setFilePath(file.getAbsolutePath());
        fileObject.setContentLengthLimit(1024 * 1024 * 10);
        //使用媒体消息分享
        WXMediaMessage msg = new WXMediaMessage(fileObject);
        //这个title有讲究,最好设置为带后缀的文件名,否则可能分享到微信后无法读取
        msg.title = file.getName();
        //设置显示的预览图 需小于32KB
        if (thumbId <= 0) thumbId = R.mipmap.ic_launcher;
        msg.thumbData = readBitmap(context, thumbId);
        //发送请求
        SendMessageToWX.Req req = new SendMessageToWX.Req();
        //创建唯一标识
        req.transaction = String.valueOf(System.
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值