android过滤安装,根据安装的Android软件包名称自定义过滤意图选择器
我做了一个小修改,以获得您想要通过名称共享的应用程序列表。它几乎就是您已发布的内容,但添加的应用程序按名称共享String[]nameOfAppsToShareWith=newString[]{"facebook","twitter","gmail"};String[]blacklist=newString[]{"com.any.package","net.other....
我做了一个小修改,以获得您想要通过名称共享的应用程序列表。它几乎就是您已发布的内容,但添加的应用程序按名称共享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发布的解决方案几乎相同,但只需添加一个名称即可轻松选择您想要分享的应用程序,以便在更改包名称或类似名称时不会有任何问题这个。只要他们不改名字。
更多推荐
所有评论(0)