Android Intent.ACTION_GET_CONTENT(仅使用ResolveInfo中的特定应用)

时间:2013-05-15 23:26:15

标签: android android-intent

在这里遇到一点障碍,为用户提供了从图库中选择照片的选项。在某些手机上,有更多的应用程序声称处理用户将其作为选择的目的...有没有办法以标准方式过滤到标准问题照片库?

p.queryIntentActivities中的第一项是否始终是图库?

以下是我们为获取应用列表所做的工作....

Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.setType("image/*");
i.putExtra("return-data", true);
PackageManager p = new PackagerManager();
List<ResolveInfo> list = p.queryIntentActivities(i, 0);

因此,如果我们只获得一个resolveinfo ...太棒了!但是,如果我们在列表中获得多个项目...通过packageName过滤似乎有点hacky,因为我们不知道packageName将是什么...那里有太多不同的手机。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

  

在某些手机上,有更多应用声称可以处理用户将其作为选择的应用...有没有办法以标准方式过滤到标准问题照片库?

不,因为没有&#34;标准问题照片库&#34;。

  

p.queryIntentActivities中的第一项是否始终是图库?

没有

  

有什么建议吗?

允许用户从他们选择的任何支持ACTION_GET_CONTENT MIME类型image/*的应用中选择图片。

答案 1 :(得分:0)

以下是使用ResolveInfo中特定应用的方法: 当您确切知道要使用哪一个并且不希望使用&#34;显示&#34;完成操作时,这将非常有用。对话框。

  1. 查询响应Intent.ACTION_GET_CONTENT的应用:

    Intent intent= new Intent(Intent.ACTION_GET_CONTENT, null);
    intent.setType("image/*");
    mApps = context.getPackageManager().queryIntentActivities(intent, 0);
    
  2. mApps将保留所有支持Intent.ACTION_GET_CONTENT意图的应用程序列表。

  3. 为您所需的应用消防startActivityForResult:

    ResolveInfo info = mApps.get(position); // depends on which app you want to start
    String packageName = info.activityInfo.packageName;
    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_GET_CONTENT);
    intent.setPackage(packageName); // this will direct the intent to your specific app
    intent.setType("image/*");
    intent.putExtra("crop", "true");
    ...
    startActivityForResult(intent, PICK_IMAGE);