调起微信朋友圈,分享多张图片和描述
Android调用微信分享的方式:
- 最为正规的方式当然是使用微信的sdk进行调起微信的分享。但是可恶的目前微信的sdk版本暂时是
不支持分享多张图片的
。 - 使用第三方封装的分享的SDK。例如:ShareSDK,友盟的社会化分享等等。
- Android下可以直接使用系统的分享,直接调用微信的分享朋友圈的Activity,通过Intent进行传递数据。
这种方式其实是因为微信实现了Android系统分享的Intent Action的规则(这一点可以将微信进行反编译来进行验证)
。注意:这种方式只能在Android上来实现,在ios系统下其实是无法实现的
Sample
实现的Sample我已经放到了GitHub上,有兴趣以及有这方面需求的可以去看一下。
地址如下:https://github.com/JeffWangGithub/TestWXMultiShare
具体实现思路
1. 微信默认情况下实现了Android系统的分享的Intent Action规则。因此我们可以反编译微信,找到多张图片分享界面对应的Activity, 此Activity正好实现了两个规则。因此我们可以直接调用此Activity将数据传递给它,达到分享的目的。
2. 自动传递描述信息,这就需要将其对应的来,找到如何通过Intent传递描述信息了。
微信的反编译代码解析
- 清单文件代码,查看实现的Intent规则
从清单文件中可以看出分享多张图片的类ShareToTimeLineUI,实现了系统的两个分享规则,因此我们可以通过Activity的隐式调用调起此Activity
- 查看此类传递的描述文案能否通过Intent将其传递
微信的代码已经做了代码混淆,因此看起来有些痛快,但是仔细观察还是有很多东西可以看出来的。在此类中我们寻找Intent传递的有关key的名称,好到了好几个,因此我们可以一个个来测试,最终发现就是Kdescription这个键来传递描述信息
1 | public void shareToFriendsCircle(Context context,String Kdescription,String... paths) { |
调用方式:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38public class MyActivity extends Activity implements View.OnClickListener{
private File[] files;
private String[] paths;
/**
* Called when the activity is first created.
*/
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 遍历 SD 卡下 .png 文件通过微信分享,保证SD卡根目录下有.png的文件
File root = Environment.getExternalStorageDirectory();
files = root.listFiles(new FileFilter() {
public boolean accept(File pathname) {
if (pathname.getName().endsWith(".jpg"))
return true;
return false;
}
});
}
public void onClick(View v) {
switch (v.getId()){
case R.id.share_btn1:
if(files == null || files.length == 0){
Toast.makeText(this,"SD卡根目录下无.png格式照片",Toast.LENGTH_SHORT).show();
}else{
ShareUtils.shareMultiPicToWXCircle(this, "你好,成功的分享了多张照片到微信",files);
}
break;
}
}
}