3

我正在构建一个应用程序,它自动对已安装的应用程序进行排序并允许用户启动这些应用程序。我刚刚遇到了相机应用程序的一个小问题。当我使用“ queryIntentActivities ”为“ ResolveInfo ”扫描已安装的应用程序时,我得到了两次图库 ResolveInfo 并且两个对象都是相同的。我想知道我是否遗漏了一些明显的东西,或者相机根本无法从包名称中启动。

如果相机和图库共享同一个包,我是否仍然可以使用包管理器来拉取每个包的图标和标签?我想避免使用我自己的可绘制对象,因为不同的 OEM 制作不同的图标。

我知道我可以简单地以捕获图像意图启动相机,但我不关心结果,我想将相机作为独立活动启动,加上使用此意图并不能真正解决我的问题。

更新:

所以我收到的相机和画廊的ResolveInfo并不完全相同。它们共享相同的包名称,但我可以通过ResolveInfo.loadLabelResolveInfo.loadIcon提取它们各自的图标(而不是我对ResolveInfo.ApplicationInfo.loadLabel所做的事情......返回相同的标签和图标)。但是我仍然无法找到任何方法来分别启动相机和画廊的活动。

更新 2.0

问题解决了。我在ResolveInfo.ActivityInfo.name中找到了唯一的活动字符串。现在,我不再使用包名称启动应用程序,而是使用该变量中列出的活动启动它。

4

2 回答 2

2

不,相机和图库的包管理器是不同的。

对于相机 - com.android.camera。对于画廊 - com.android.gallery

这是您区分画廊和相机的方式。

于 2013-09-19T06:55:46.230 回答
2

获取相机应用程序包名称的最佳方法粘贴在下面。可以参考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);
}


于 2019-10-03T15:23:29.337 回答