我正在尝试为ACTION_SEND
PackageManager pm = getApplicationContext().getPackageManager();
Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND)
.setType("application/octet-stream");
List<Intent> targetedShareIntents = new ArrayList<Intent>();
List<ResolveInfo> resInfo = pm.queryIntentActivities(shareIntent, 0);
Collections.sort(resInfo, new ResolveInfo.DisplayNameComparator(pm));
for (ResolveInfo resolveInfo : resInfo) {
String packageName = resolveInfo.activityInfo.packageName;
Intent targetedShareIntent = new Intent(android.content.Intent.ACTION_SEND)
.setType("application/octet-stream")
.setPackage(packageName);
targetedShareIntents.add(targetedShareIntent);
}
Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), "Title");
chooserIntent.putExtra( Intent.EXTRA_INITIAL_INTENTS, targetedShareIntents.toArray(new Parcelable[]{}));
startActivity(chooserIntent);
问题在于,对于具有相同操作的多个活动的应用程序(如ES文件资源管理器),它会多次列为“Android系统”,如图1所示。 http://imgur.com/a/3TYMA
然后如果选中它,它会为您提供与该应用程序关联的标准Intent选择器,如图2所示。
问题:我如何实现一个自定义的Intent选择器,就像内置的一样,每个Activity都列在一起。 如图3所示。
答案 0 :(得分:1)
找到一些东西摆脱“Android系统”文本,现在它显示“ES文件资源管理器”。和es文件资源管理器图标。我添加了这些日志语句:
Log.d(TAG, packageName );
Log.d(TAG, resolveInfo.activityInfo.name );
和ES File Explores的结果是:
com.estrongs.android.pop
com.estrongs.android.pop.app.ESFileSharingActivity
com.estrongs.android.pop
com.estrongs.android.pop.app.SaveToESActivity
然后我在循环中添加了以下语句:
targetedShareIntent.setClassName(packageName, resolveInfo.activityInfo.name);
现在您将看到两次ES文件资源管理器。但不幸的是两次相同的信息。和相同的图标。
认为你应该把es文件资源管理器的人邮寄到这篇文章的链接。他们很有帮助。他们会感兴趣。