转载自:http://www.dewen.io/q/1742#ans3804
但是实际开发中遇到一个问题,就是有些应用会注册多个send入口,比如qq、微信和百度云,这个时候过滤出来的包名是相同的,相同的包名会被系统包裹为“Android系统”,十分影响用户体验,经过研究修改如下(红色部分为主要修改点,这样就可以指定具体Activity,避免因为包名相同而出现“Android系统”现象):
public static void shareContentNoUs(Context context, String text) {
Activity activity = (Activity) context;
Intent it = new Intent(Intent.ACTION_SEND);
it.setType("text/plain");
List<ResolveInfo> resInfo = activity.getPackageManager().queryIntentActivities(it,
PackageManager.MATCH_DEFAULT_ONLY);
if (!resInfo.isEmpty()) {
List<Intent> targetedShareIntents = new ArrayList<Intent>();
for (ResolveInfo info : resInfo) {
Intent targeted = new Intent(Intent.ACTION_SEND);
targeted.setType("text/plain");
ActivityInfo activityInfo = info.activityInfo;
// judgments : activityInfo.packageName, activityInfo.name, etc.
if (activityInfo.packageName.contains("bluetooth") || activityInfo.name.contains("bluetooth")) {
continue;
} else if (activityInfo.packageName.contains("com.suning.netdisk")) {
continue;
}
targeted.putExtra(Intent.EXTRA_SUBJECT, context.getString(R.string.share));
targeted.putExtra(Intent.EXTRA_TEXT, text);
targeted.setPackage(activityInfo.packageName);
<span style="color:#ff0000;">targeted.setClassName(activityInfo.packageName, activityInfo.name);</span>
targetedShareIntents.add(targeted);
}
try {
if (targetedShareIntents.size() == 0) {
Toast.makeText(activity, "不存在分享组件", Toast.LENGTH_SHORT).show();
return;
}
Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0),
context.getString(R.string.share_choose_application));
if (chooserIntent == null) {
return;
}
// A Parcelable[] of Intent or LabeledIntent objects as set with
// putExtra(String, Parcelable[]) of additional activities to place
// a the front of the list of choices, when shown to the user with a
// ACTION_CHOOSER.
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[] {}));
activity.startActivity(chooserIntent);
} catch (Exception ex) {
Toast.makeText(activity, "不存在分享组件", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(activity, "不存在分享组件", Toast.LENGTH_SHORT).show();
}
}