我正在构建一个自动排序已安装应用的应用,并允许用户启动这些应用。我刚刚用相机应用程序遇到了一个小问题。当我使用“ queryIntentActivities ”扫描已安装的应用时,对于“ ResolveInfo ”,我得到了两次图库ResolveInfo,两个对象都是相同的。我想知道我是否遗漏了一些明显的东西,或者相机根据包装名称无法启动。
如果相机和图库共享相同的包,我仍然可以使用包管理器为每个包拉出图标和标签吗?我想避免使用我自己的drawable,因为不同的OEM制作不同的图标。
我知道我可以简单地启动具有捕获图像意图的相机,但我不关心结果,我想将相机作为一个独立的活动启动加上使用此意图并不能真正解决我的问题。
更新
因此我收到的相机和图库的 ResolveInfo 并不完全相同。它们共享相同的软件包名称,但我可以通过 ResolveInfo.loadLabel 和 ResolveInfo.loadIcon 拉出各自的图标(而不是我在做什么 ResolveInfo.ApplicationInfo .loadLabel ...返回相同的标签和图标)。但是我仍然无法找到任何方法来单独启动相机和画廊的活动。
更新2.0
问题已解决。我在 ResolveInfo.ActivityInfo.name 中找到了唯一的活动字符串。现在,而不是使用包名称启动应用程序,我只需使用该变量中列出的活动启动它。
答案 0 :(得分:2)
不,相机和图库的包管理器不同。
用于相机 - com.android.camera 。 for gallery - com.android.gallery 。
这是区分画廊和相机的方式。
答案 1 :(得分:0)
获取相机应用程序包名称的最佳方法粘贴在下面。您可以通过引用cameraInfo.activityInfo.packageName来获得包名称。由下面的函数返回
public static ResolveInfo getCameraPackageName(Context context, PackageManager pm) {
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
ResolveInfo cameraInfo = null;
List<ResolveInfo> pkgList = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
if(pkgList != null && pkgList.size() > 0) {
cameraInfo = pkgList.get(0);
}
return(cameraInfo);
}