android.hardware.camera2.full 来自哪里?

Posted

技术标签:

【中文标题】android.hardware.camera2.full 来自哪里?【英文标题】:Where does android.hardware.camera2.full come from? 【发布时间】:2018-06-14 03:57:43 【问题描述】:

我正在尝试实现一个相机应用程序。并检查示例。一些示例包含以下清单功能:uses-feature android:name="android.hardware.camera2.full。 我检查了官方文档和谷歌示例,没有一个提到现有的这个功能。 (或者我错过了一些)。

这个功能的来源和android.hardware.camera有什么区别?


编辑: 让我困惑的是googlesamples 上的那些例子:

https://github.com/googlesamples/android-Camera2Basic/blob/master/kotlinApp/Application/src/main/AndroidManifest.xml

还有这个

https://github.com/googlesamples/android-Camera2Basic/blob/master/Application/src/main/AndroidManifest.xml

还有这个

https://github.com/googlesamples/android-Camera2Raw/blob/master/Application/src/main/AndroidManifest.xml

他们使用新的Camera2 API 和旧的清单features。我不知道两者是如何结合在一起的。

【问题讨论】:

android.hardware.camera 已弃用 @halfer 会尽量记住。同意你的意见。 @NileshRathod 该功能仍称为 android.hardware.camera,因此即使您使用的是新的 camera2 api,您仍然需要相同的功能。找不到名为 camera2 的功能的任何参考 【参考方案1】:

功能标志和相机 API 的名称实际上并不相关,即使它们看起来相同。

"android.hardware.camera" (PackageManager.FEATURE_CAMERA) 功能意味着该设备有一个后置摄像头。就这样;任何想要避免安装在没有后置摄像头的设备上的应用都需要列出该应用。

它与 Java android.hardware.Camera 类无关。

"android.hardware.camera.level.full" (PackageManager.FEATURE_CAMERA_LEVEL_FULL) 功能表示,当通过android.hardware.camera2 API 包使用时,设备上至少有一个摄像头支持FULL hardware level。

因此,带有后置摄像头的设备始终会列出“android.hardware.camera”。如果它有一个好的相机,它会列出“android.hardware.camera.level.full”。

由于 camera2 的示例应用旨在在任何质量的相机上运行,​​它们只需要有一个相机设备,而不是它具有任何特定级别的功能。

我看到一些开发者试图要求一个像“android.hardware.camera2”这样的功能; Android SDK 中没有定义此类功能,因此尝试要求它意味着您的应用无法安装在任何设备上。从 Android 5.0 (Lollipop) 开始,camera2 API 始终可用;这只是每个相机设备支持什么硬件级别(LEGACY、LIMITED、FULL 或 LEVEL_3)的问题。

【讨论】:

我觉得这是一个更好的答案。没有名为 android.hardware.camera2.full 的功能【参考方案2】:

与往常一样,最好查看 Android source code 本身:

* A given camera device may provide support at one of two levels: limited or * full. If a device only supports the limited level, then Camera2 exposes a * feature set that is roughly equivalent to the older * @link android.hardware.Camera Camera API, although with a cleaner and more * efficient interface. Devices that implement the full level of support * provide substantially improved capabilities over the older camera * API. Applications that target the limited level devices will run unchanged on * the full-level devices; if your application requires a full-level device for * proper operation, declare the "android.hardware.camera2.full" feature in your * manifest.</p>

我希望澄清您提到的功能的性质。

至于 camera2 api - 这些是 Android 5(api 级别 21)中的 introduced,试图创建更清洁的 api 用于与相机交互,而不是旧的 camera api。

【讨论】:

这里怎么没有列出这个android.hardware.camera2.full功能? developer.android.com/guide/topics/manifest/… 当我在清单中添加此功能时,它在 playstore 中显示 0 个支持的设备! 这可能对您支持的设备有所帮助***.com/questions/33063254/… @Yashvit 答案中的链接已过时,在较新版本的 CameraDevice.java 中,该功能据说是“android.hardware.camera.level.full”,对应于 PackageManager.FEATURE_CAMERA_LEVEL_FULL 【参考方案3】:

Android 从 Android API 21 开始引入 Camera2 api,这个新的 Camera api 使其更易于使用和更改参数。以前的版本在功能上受到更多限制。

Android Camera2 有 4 个级别的实现,具体取决于制造商:

    旧版:它只是 Camera2 和 Camera 之间的转换。仅用于兼容性。只是 Camera2 的某些功能可以正常工作。 有限:有 Camera2 实现,但不是所有可用的方法。 (并非所有制造商都采用相同的方法,因此并非所有设备都适用于所有设备) 完整:Camera2 的所有方法都已实现。通常制造商会在其旗舰设备上实现这一点。 3 级:另外支持 YUV 再处理和 RAW 图像捕获。 (最佳案例)

source here 和个人经历。

【讨论】:

【参考方案4】:

如果我们只是导航到 Android Studio 中的抽象类,我们会更清楚,它提供以下信息

/** *

CameraDevice 类表示连接到 * Android 设备,允许精细控制图像捕获和 * 以高帧速率进行后期处理。

* *

您的应用程序必须声明 * 清单中的 @link android.Manifest.permission#CAMERA Camera 权限 * 为了访问相机设备。

* *

给定的相机设备可以提供以下两个级别之一的支持:受限或 * 满的。如果设备只支持受限级别,那么 Camera2 会暴露一个 * 大致相当于旧版的功能集 * @link android.hardware.Camera Camera API,虽然有更清洁和更多 *高效的界面。实现全面支持的设备 * 提供比旧相机显着改进的功能 * API。针对受限级别设备的应用程序将在 * 全级设备; 如果您的应用需要全级设备 * 正确操作,在你的中声明“android.hardware.camera.level.full”功能 * 清单。

* * @see CameraManager#openCamera * @see android.Manifest.permission#CAMERA */ 公共抽象类 CameraDevice 实现 AutoCloseable

所以没有必要或者我不相信任何说camera2和其他人指出的一样的东西。

【讨论】:

以上是关于android.hardware.camera2.full 来自哪里?的主要内容,如果未能解决你的问题,请参考以下文章

CameraX 或 android.hardware.camera2 中的 setPreviewCallbackWithBuffer 的模拟

获取每个android.hardware.camera2帧在surfacetexture上显示之前的数据

android.hardware.camera2.CameraAccessException

错误:包 android.hardware.camera2 不存在 OpenCV

Android 已弃用 android.hardware.Camera,现在建议使用 android.hardware.camera2 但这在 API 21 以下的任何内容中均不可用

如果我为 android.hardware.camera2.full 添加 <uses-feature> 我应该删除 android.hardware.camera