我做了一个小修改,以获得您想要通过名称共享的应用程序列表。它几乎就是您已发布的内容,但添加的应用程序按名称共享String[] nameOfAppsToShareWith = new String[] { "facebook", "twitter", "gmail" };String[] blacklist = new String[]{"com.any.package", "net.other.package"};// your share intentIntent intent = new Intent(Intent.ACTION_SEND);intent.setType("text/plain");intent.putExtra(Intent.EXTRA_TEXT, "some text");intent.putExtra(android.content.Intent.EXTRA_SUBJECT, "a subject");// ... anything else you want to add invoke custom chooserstartActivity(generateCustomChooserIntent(intent, blacklist));private Intent generateCustomChooserIntent(Intent prototype,

String[] forbiddenChoices)

{

List targetedShareIntents = new ArrayList();

List> intentMetaInfo = new ArrayList>();

Intent chooserIntent;

Intent dummy = new Intent(prototype.getAction());

dummy.setType(prototype.getType());

List resInfo = getPackageManager().queryIntentActivities(dummy,0);

if (!resInfo.isEmpty())

{

for (ResolveInfo resolveInfo : resInfo)

{

if (resolveInfo.activityInfo == null

|| Arrays.asList(forbiddenChoices).contains(

resolveInfo.activityInfo.packageName))

continue;

//Get all the posible sharers

HashMap info = new HashMap();

info.put("packageName", resolveInfo.activityInfo.packageName);

info.put("className", resolveInfo.activityInfo.name);

String appName = String.valueOf(resolveInfo.activityInfo                        .loadLabel(getPackageManager()));

info.put("simpleName", appName);

//Add only what we want

if (Arrays.asList(nameOfAppsToShareWith).contains(

appName.toLowerCase()))

{

intentMetaInfo.add(info);

}

}

if (!intentMetaInfo.isEmpty())

{

// sorting for nice readability

Collections.sort(intentMetaInfo,

new Comparator>()

{

@Override public int compare(

HashMap map,

HashMap map2)

{

return map.get("simpleName").compareTo(

map2.get("simpleName"));

}

});

// create the custom intent list

for (HashMap metaInfo : intentMetaInfo)

{

Intent targetedShareIntent = (Intent) prototype.clone();

targetedShareIntent.setPackage(metaInfo.get("packageName"));

targetedShareIntent.setClassName(

metaInfo.get("packageName"),

metaInfo.get("className"));

targetedShareIntents.add(targetedShareIntent);

}

String shareVia = getString(R.string.offer_share_via);

String shareTitle = shareVia.substring(0, 1).toUpperCase()

+ shareVia.substring(1);

chooserIntent = Intent.createChooser(targetedShareIntents                        .remove(targetedShareIntents.size() - 1), shareTitle);

chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS,

targetedShareIntents.toArray(new Parcelable[] {}));

return chooserIntent;

}

}

return Intent.createChooser(prototype,

getString(R.string.offer_share_via));

}

它与Makibo发布的解决方案几乎相同,但只需添加一个名称即可轻松选择您想要分享的应用程序,以便在更改包名称或类似名称时不会有任何问题这个。只要他们不改名字。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐