Android 如何从本机编译的 c++ 二进制文件访问相机

How to access camera from natively compiled c++ binary in Android

我一直在尝试使用 Android C++ 本机 API 访问相机。但是我没有将二进制文件包含在 APK 中,而是将代码编译成可执行文件并使用 ADB 推送到设备中。二进制文件放在 /data/local/tmp 目录中并从 adb shell.

执行

但是我无法访问相机,是否缺少任何权限?还是 Android 禁止直接从可执行文件使用相机?

#include<stdio.h>
#include <camera/NdkCameraManager.h>

int main(){
    printf("Camera Manager\n");
    ACameraManager *cameraManager = ACameraManager_create();
    ACameraIdList *cameraIds = nullptr;
    ACameraManager_getCameraIdList(cameraManager, &cameraIds);
    printf("Number of camera %d\n", cameraIds->numCameras);
    //deleting the camera manager
    ACameraManager_delete(cameraManager);
    printf("Deleted the camera\n");  
}

以上代码始终打印 0 作为摄像头编号

很可能,您的 phone 有一台 LEGACY 相机。 NdkCamera 不适用于 LEGACY 相机,这就是 numCameras 获得 0 的方式。您不需要权限即可打开管理器并读取 idList。

但是您实际上无法从命令行打开相机:您无法将 android.permission.CAMERA 分配给本机二进制文件。此外,您需要一个活页夹界面来使用相机,请参阅 (that answer was written before the NDK r.20 when NdkBinder 已发布).