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

时间:2018-01-04 12:06:41

标签: android android-camera android-camera2

我正在尝试实施相机应用。并检查示例。一些示例包含以下清单功能: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。我不知道两者是如何结合在一起的。

4 个答案:

答案 0 :(得分:6)

与往常一样,最好查看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 apis - Android 5中的introduced(api等级21),尝试创建与相机交互的清洁api,而不是旧的camera API。

答案 1 :(得分:5)

功能标志和相机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中没有定义此类功能,因此尝试要求它意味着您的应用无法安装在任何设备上。 camera2 API始终可以从Android 5.0(Lollipop)开始使用;这只是每个相机设备支持的硬件级别(LEGACY,LIMITED,FULL或LEVEL_3)的问题。

答案 2 :(得分:3)

Android自Android API 21推出了Camera2 api,这款全新的Camera api使其更加实用,更易于更改参数。之前的版本在功能上更受限制。

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

  1. 遗产:它只是Camera2和相机之间的转换。仅用于兼容性。只是Camera2的一些东西正常工作。
  2. 受限:具有Camera2实现,但不是所有可用的方法。 (并非所有制造商都实施相同的方法,因此并非所有设备都可以在每台设备上运行)
  3. 完整:实现了Camera2的所有方法。通常制造商会在其旗舰设备上实施此功能。
  4. 第3级:另外支持YUV重新处理和RAW图像捕获。 (最佳案例)
  5. source here和个人经历。

答案 3 :(得分:0)

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

/ **  *

CameraDevice类是连接到  * Android设备,可对图像捕获和图像进行细粒度控制  *以高帧率进行后处理。

 *  *

您的应用程序必须声明  *清单中的{@link android.Manifest.permission#CAMERA Camera}权限  *,以便访问摄像头设备。

 *  *

给定的摄像头设备可以提供以下两个级别之一的支持:受限或  *满。如果设备仅支持有限级别,则Camera2会公开  *与旧版本大致相同的功能集  * {@link android.hardware.Camera Camera} API,尽管具有更清洁的功能和更多功能  *高效的界面。实现全面支持的设备  *与旧相机相比,功能大大提高  * API。针对有限级别设备的应用程序将在  *完整级别的设备; 如果您的应用程序需要用于  *正确操作,请在您的中声明“ android.hardware.camera.level.full”功能  *清单。

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

因此,没有必要,或者我什么也没说,说出camera2并与其他人指出的相同。