之前项目中顾客模块改版时,产品提到想要做一个分享信息到企业微信的功能,正常的方案应该是到企业微信开发者中心查看文档确定分享的API 调用,然后集成到项目中,但是我们找了半天并没有在企业微信文档中找到相应的API, 于是只能另辟蹊径。
一开始我们想到的是跟踪企业微信的页面套转的栈信息,拿到了企微的包名以及分享后跳转的Activity 全路径,然后通过Intent.setComponent() 后直接跳转到分享页面,但是企微内部做了某些校验,导致我们跳转一直失败,后来我们把思路拓展到系统分享的功能上来。
我们知道Android系统分享调用是如何调用的:
分享文本内容
Intent intent=new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT,"This is text to send");
intent.setType("text/plain");
startActivity(Intent.createChooser(intent,"share"));
这时候系统会给我们弹出一个分享到哪里的选择弹窗,其中企业微信就在这个弹窗的选择列表里,那么企微的分享页面肯定有设置action 为Intent.ACTION_SEND.那我们只需要找到设置了Intent.ACTION_SEND 的页面然后遍历找出包名为企微包名的Activity ,就可以直接跳转过去了。
具体实现的代码如下:
public static void shareToWeworkChat(String packageName,String message){
boolean found = false;
Intent share = new Intent(android.content.Intent.ACTION_SEND);
share.setType("text/plain");
List<ResolveInfo> resInfo = context.getPackageManager().queryIntentActivities(
share, 0);
if (!resInfo.isEmpty()) {
Intent shareIntent = new Intent(Intent.ACTION_SEND);
for (ResolveInfo info : resInfo) {
if (info.activityInfo.packageName.toLowerCase().contains(packageName)
|| info.activityInfo.name.toLowerCase().contains(packageName)) {
shareIntent.setComponent(new ComponentName(info.activityInfo.packageName, info.activityInfo.name));
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, message);
shareIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
found = true;
break;
}
}
if (!found) {
ToastUtils.showToast(context, "您没有安装企业微信");
return;
}
context.startActivityForResult(shareIntent, QUEST_CODE_SEND_WET_CHAT_TWO);
startTime = System.currentTimeMillis();
} else {
ToastUtils.showToast(context, "您没有安装企业微信");
}
}