【发布时间】:2018-04-09 15:40:38
【问题描述】:
我正在尝试使用 NDK camera2 API(来自 abi 级别 24)创建 C++ Android 原生相机包装器。我使用找到的示例创建了一些 sn-p 代码,并将其编译为目标 API 级别 24,并在 Android 7.1 手机上运行:
ACameraManager *cameraManager = ACameraManager_create();
VB(cameraManager!=nullptr, "Could not create CameraManager.");
camera_status = ACameraManager_getCameraIdList(cameraManager, &m_camera_id_list);
if (camera_status != ACAMERA_OK) {
LOGE("Failed to get camera id list (reason: %d)\n", camera_status);
return ERR_CAMERAAPI_UNKNOWN_ERROR;
}
if (m_camera_id_list->numCameras < 1) {
LOGE("No camera device detected.\n");
return ERR_CAMERAAPI_UNKNOWN_ERROR;
}
当我在小米 mi4c Android 7.1 手机上运行这个简单的代码时,我得到一个空的相机列表。
我还尝试在同一部手机上运行使用 Java camera2 API 创建的 sn-p,它执行相同的操作:
import android.hardware.camera2.CameraDevice;
Activity activity = getActivity();
CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE);
String[] cameraIds = manager.getCameraIdList()
manager.openCamera(cameraIds[0], mStateCallback, mBackgroundHandler);
这一次我在逻辑上看到它实际上找到了两个相机并打印它们的分辨率。
我的清单当然包含以下几行:
<uses-sdk android:minSdkVersion="24" />
<uses-feature android:name="android.hardware.camera2" android:required="true" />
<uses-feature android:name="android.hardware.sensor.gyroscope" android:required="false" />
<uses-permission android:name="android.permission.CAMERA"/>
我批准了权限请求。
有谁知道为什么在使用 Java camera2 API 时会找到手机摄像头,但在使用 NDK camera2 API 时却找不到?
【问题讨论】:
-
您找到解决问题的方法了吗?我与运行 Nougat 7.1.1 的 Moto E4+ 有相同的行为。您是否尝试过调用旧版 API?
标签: android api android-ndk android-camera2