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 已发布).
我一直在尝试使用 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 分配给本机二进制文件。此外,您需要一个活页夹界面来使用相机,请参阅