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



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

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

#include<stdio.h>
#include <camera/NdkCameraManager.h>
int main(){
printf("Camera Managern");
ACameraManager *cameraManager = ACameraManager_create();
ACameraIdList *cameraIds = nullptr;
ACameraManager_getCameraIdList(cameraManager, &cameraIds);
printf("Number of camera %dn", cameraIds->numCameras);
//deleting the camera manager
ACameraManager_delete(cameraManager);
printf("Deleted the cameran");  
}

上面的代码始终打印0作为相机的数量

最有可能的是,您的手机具有传统相机。NdkCamera 不适用于 LEGACY 相机,这就是您获得numCamera0的方式。您不需要权限即可打开管理器并读取 idList。

但是您实际上无法从命令行打开相机:您不能将android.permission.CAMERA分配给本机二进制文件。此外,您需要一个活页夹接口才能使用相机,请参阅 https://stackoverflow.com/a/54224388/192373(该答案是在 NdkBinder 发布时在 NDK r.20 之前编写的(。

最新更新