0

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

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);

因此,如果我们只获得一个解决信息...太好了!但是,如果我们在列表中获得多个项目......按 packageName 过滤似乎有点 hacky,因为我们不知道 packageName 将是什么......那里有太多不同的电话。

有什么建议吗?

4

2 回答 2

1

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

不,因为没有“标准问题照片库”。

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

不。

有什么建议吗?

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

于 2013-05-15T23:29:55.527 回答
0

这是使用 ResolveInfo 中的特定应用程序的一种方法:当您确切知道要使用哪个应用程序并且不想显示“使用完整操作”对话框时,这很有帮助。

  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);
    
于 2014-03-29T18:26:44.490 回答