【问题标题】:Android custom Intent chooser to list Activities用于列出活动的 Android 自定义 Intent 选择器
【发布时间】: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,都会得到相同的结果

标签: android android-intent


【解决方案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 File Explorer。但不幸的是两次相同的信息。和相同的图标。

认为您应该向 es 文件浏览器的人发送此帖子的链接。他们很有帮助。他们会感兴趣的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 2014-03-24
    • 2017-01-24
    • 1970-01-01
    相关资源
    最近更新 更多