Android调用系统分享直接抵达微信

本文探讨了Android如何调用系统分享功能直达微信,指出系统分享与微信SDK在朋友圈分享上的区别,并提供了略过应用选择列表,直接打开微信分享页面的方法,包括关键代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

相对于使用微信官方的分享sdk,系统调用的分享到微信还是有很大的差异的。
系统分享而微信官方sdk分享的最大区别就是关于朋友圈分享,微信朋友圈对系统分享的限制是只允许分享照片。而对分享给联系人,添加收藏则是没有限制。

调用系统分享

隐式意图为:Intent.ACTION_SEND其实质是android.intent.action.SEND。当调用这个意图时,测试系统会弹出一个列表,如图:
这里写图片描述
该列表包含了,所有注册了”android.intent.action.SEND”以及”android.intent.action.SEND_MULTIPLE”意图的应用。
关键代码:

        Intent intent = new Intent(Intent.ACTION_SEND)
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setType("image/jpg");
        intent.setType("text/*");
        intent.putExtra(Intent.EXTRA_STREAM, uri);
        intent.putExtra(Intent.EXTRA_SUBJECT, "测试标题");
        intent.putExtra(Intent.EXTRA_TEXT, "测试内容");
        startActivity(Intent.createChooser(intent, "来自xxx"));

这样做有一个明显的缺点,多了一个用户选择的步骤?怎么把这个步骤减去呢?请往下看!

怎样略过这个列表,知道微信分享页面?

先来轻微的反编译以下微信的apk,查看以下清单文件,节选以下部分:

<activity android:configChanges="keyboardHidden|orientation|screenSize" android:icon="@drawable/icon" android:name="com.tencent.mm.ui.tools.ShareImgUI">
            <intent-filter android:label="@string/h6">
                <action android:name="android.intent.action.SEND"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="image/*"/>
                <data android:mimeType="video/*"/>
                <data android:mimeType="text/*"/>
                <data android:mimeType="application/*"/>
            </intent-filter>
            <intent-filter android:label="@string/h6">
                <action android:name="android.intent.action.SEND_MULTIPLE"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="image/*"/>
            </intent-filter>
        </activity>
        <activity android:configChanges="keyboardHidden|orientation|screenSize" android:icon="@drawable/adf" android:name="com.tencent.mm.ui.tools.AddFavoriteUI">
            <intent-filter android:label="@string/d5">
                <action android:name="android.intent.action.SEND"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="image/*"/>
                <data android:mimeType="video/*"/>
                <data android:mimeType="text/*"/>
                <data android:mimeType="application/*"/>
                <data android:mimeType="audio/*"/>
            </intent-filter>
            <intent-filter android:label="@string/d5">
                <action android:name="android.intent.action.SEND_MULTIPLE"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="image/*"/>
            </intent-filter>
        </activity>
        <activity android:configChanges="keyboardHidden|orientation|screenSize" android:icon="@drawable/a8q" android:name="com.tencent.mm.ui.tools.ShareToTimeLineUI">
            <intent-filter android:label="@string/h5">
                <action android:name="android.intent.action.SEND"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="image/*"/>
            </intent-filter>
            <intent-filter android:label="@string/h5">
                <action android:name="android.intent.action.SEND_MULTIPLE"/>
                <category android:name="android.intent.category.DEFAULT"/>
                <data android:mimeType="image/*"/>
            </intent-filter>
        </activity>

经过测试发现其中:

        "com.tencent.mm.ui.tools.ShareImgUI"发送给联系人
        "com.tencent.mm","com.tencent.mm.ui.tools.AddFavoriteUI"添加到收藏
        "com.tencent.mm.ui.tools.ShareToTimeLineUI" 发送到朋友圈

说明一下微信的包名为:"com.tencent.mm"
还可以看出分享类型:

                <data android:mimeType="image/*"/>
                <data android:mimeType="video/*"/>
                <data android:mimeType="text/*"/>
                <data android:mimeType="application/*"/>

知道了以上内容,我们就可以直达微信的这三种分享了,原理就是直接调用微信的分享页面:
这里举一个分享图片的例子:

        Intent intent = new Intent();
        ComponentName comp = new ComponentName("com.tencent.mm","com.tencent.mm.ui.tools.ShareToTimeLineUI");
        intent.setComponent(comp);
        intent.setAction(Intent.ACTION_SEND);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setType("image/jpg");
        intent.putExtra(Intent.EXTRA_STREAM, uri);//uri为你要分享的图片的uri
        startActivity(intent);

但是有一点败笔就是,系统调用的分享没有回调。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值