您的位置:首页 > 移动开发 > Android开发

android调用系统分享指定某些应用

2018-02-12 12:12 387 查看
有个需求是在调用系统分享的时候,分享到页面地图打不开,所以分享列表中药去掉地图类的应用,具体实现如下,需要注意的是当同一个应用内有多个响应的组件,intent直接设置setPackageName()会导致出现系统的图标,点击后里面是一个应用的俩种分享途径,例如注释所述,所以需要制定包名和类名,给系统具体的信息

private Intent dealResultWithoutMapIntent(Boolean isLongClick) {
StringBuilder sb = null;
if (!isLongClick) {
sb = new StringBuilder(mShareManager.getShareDisplayContent());
sb.append(mShareMessage.getContentUrl());
}
other.setType("text/plain");
List<ResolveInfo> resolveInfos = mContext.getPackageManager().queryIntentActivities(other, 0);
List<Intent> targetIntents = new ArrayList<>();
for (ResolveInfo info : resolveInfos) {
Intent target = new Intent(Intent.ACTION_SEND);
target.setType("text/plain");
if (!info.activityInfo.packageName.toLowerCase().contains("map")){
/**
* 应该指定具体的包名,类名,否则相同app的不同分享方式会放在一个分组里,
* eg.wechat的俩种分享响应类
* com.tencent.mm.ui.tools.ShareImgUI
* com.tencent.mm.ui.tools.AddFavoriteUI
* 会显示系统图标,点击进去是一个app的俩种分享途径
*/
target.setClassName(info.activityInfo.packageName,info.activityInfo.name);
target.putExtra(Intent.EXTRA_TEXT,isLongClick ? mShareManager.getShareDisplayContent() : sb.toString());
target.putExtra(Intent.EXTRA_SUBJECT,mShareMessage.getTitle());
targetIntents.add(target);
}
}
// 应该去掉第一个chooserIntent , 否则会重复
Intent chooserIntent = Intent.createChooser(targetIntents.remove(0),mContext.getResources().getText(R.string.system_share_title));
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,targetIntents.toArray(new Parcelable[]{}));
return chooserIntent;
}
}


没有使用 Intent intent = new Intent( Intent.createChooser(intent,title))如下



使用createChooser

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: