【发布时间】:2015-03-26 05:31:43
【问题描述】:
我正在尝试为 ACTION_SEND 制作自定义 Intent 选择器
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 所示。
【问题讨论】:
-
like the build-in one。构建什么/哪个? -
在五台设备上试用过。只有一个显示“Android-system”两次。所有其他人都有一个 ES 文件资源管理器图标。如果更多应用显示两次会怎样?你认识另一个?
-
@greenapps by
build-in one我的意思是当您选择一个具有多个可以处理它的应用程序的 Activity 时,内置的 Activity 选择器,参见图 3 goo.gl/dGbwn0 ,android 构建模拟器连接一个显示“Android系统”, -
好的。我找到了一个部分解决方案,但想用另一个显示此行为的应用程序对其进行测试。我让你提及另一个应用,但你没有。
-
我没有其他应用程序,但我想每个应用程序在不同的
Activity中多次实现相同的Action,都会得到相同的结果