安卓相机:它有唯一的包名吗?

3
我正在开发一个自动分类已安装应用程序并允许用户启动这些应用程序的应用程序。我遇到了一个小问题,与相机应用程序有关。当我使用“queryIntentActivities”搜索“ResolveInfo”中的已安装应用程序时,我会两次得到相册ResolveInfo,并且两个对象是相同的。我想知道我是否漏掉了一些明显的东西,或者相机根本无法从包名称启动。

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

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

更新:

所以我收到的相机和相册的“ResolveInfo”并不完全相同。它们共享相同的软件包名称,但我可以通过“ResolveInfo.loadLabel”和“ResolveInfo.loadIcon”(而不是我之前使用的“ResolveInfo.ApplicationInfo.loadLabel”...返回相同的标签和图标)来获取它们各自的图标。但是,我仍然无法找到任何方法单独启动相机和相册的活动。

更新2.0:

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

2个回答

3

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



2
不,相机和图库的包管理器是不同的。
相机 - com.android.camera。 图库 - com.android.gallery
这是区分图库和相机的方式。

我进一步调查了一下,似乎这只适用于旧手机。从Android 4.1开始,相机和图库被合并到同一个包中。当然,这只适用于原生Android系统,OEM厂商可能仍然有自己的相机实现。 - https
2
@https 可以,但是你能提供那个软件包的名称吗? - Yog Guru

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接