Android调用系统分享直接抵达微信
来源:互联网 发布:数据黑产吧 编辑:程序博客网 时间:2024/05/22 15:35
前言
相对于使用微信官方的分享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);
但是有一点败笔就是,系统调用的分享没有回调。
3 0
- Android调用系统分享直接抵达微信
- [Android]不经过第三方SDK直接调用系统自带分享QQ、微信
- Android调用系统分享和指定app分享-微信朋友圈图文分享和qq分享
- Android调用系统分享和指定app分享-微信朋友圈图文分享和qq分享
- Android调用微信登陆、分享、支付
- android调用微信分享应用
- Android 微信分享的调用
- Android调用微信登陆、分享、支付
- Android系统分享,微信SDK分享,ShareSdk分享
- 调用微信分享
- Android调用微信登陆、分享、支付,android调用
- Android 调用系统分享(不使用第三方),指定QQ、微信等
- 调用系统分享 Android
- Android调用系统分享
- android调用系统分享
- Android调用微信原生分享接口,进入微信分享界面返回不了!
- Android调用第三方的微信分享功能
- Android之调用微信登陆、分享、支付
- php编程安全指南
- 20位活跃在Github上的国内技术大牛
- torch学习
- Android Studio 混淆代码
- Apache服务器最新版下载、安装及配置(win版
- Android调用系统分享直接抵达微信
- 杂的文
- Codeforces Round #352 (Div. 2) A.Summer Camp
- 安装win7、windows server 2012 出现无法配置在此计算机硬件上运行 解决方案
- 初学java反射机制
- 使用logstash+elasticsearch+kibana快速搭建日志平台
- 1.2.21 Map.values方法——获取Map集合中的所有键值对象
- SpringMVC开发笔记
- 2016/5/27 1004. 简单减法