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

Posted

技术标签:

【中文标题】Android 相机:它有唯一的包名吗?【英文标题】:Android Camera : Does it have a unique package name? 【发布时间】:2013-09-24 02:09:22 【问题描述】:

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

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

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

更新:

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

更新 2.0

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

【问题讨论】:

【参考方案1】:

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

用于相机 - com.android.camera。 用于图库 - com.android.gallery

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

【讨论】:

我进一步调查,似乎旧手机确实如此。从 android 4.1 开始,相机和图库被合并 到同一个包中。当然,这适用于库存的 android,OEM 可能仍然有自己的相机实现。 @https 好的,但是你能提供那个包的名字吗?【参考方案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);



【讨论】:

以上是关于Android 相机:它有唯一的包名吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中获取Fragment的包名(不是Activity的)[重复]

如何在 android 2.3 及更高版本中获取当前启动器的包名?

Android测试随笔获得App的包名和启动Activity

如何知道一个APP的包名呢

Android基础篇 查询当前运行的APP包名以及查询手机APP包名

更改 Cordova 项目 android 包名称