android - 由于权限问题,Android 杀死了 Qt 应用程序
问题描述
tham 5 分钟前
尝试使用 Qt5.12.3 和 opencv4.1.2(来自opencv 发布页面的 android 预构建版本)构建应用程序。
- 手机:索尼 xperia XA1 Ultra
- 数量:5.12.3
- NDK:r19c
- 最低目标:24
- 最大目标:28
- Android 库链接到:libcamera2ndk.so 和 libmediandk.so,我链接到 api 28 的库,而不是 24(android-28\arch-arm\usr\lib)
- 权限:
- 拱门:armeabi-v7a
因为需要实时处理摄像头的画面,所以我使用NdkCameraManager来抓拍摄像头的画面,但是这样会导致权限问题
错误信息:
W RenderThread: type=1400 audit(0.0:353504): avc: denied { read } for name="perf_ioctl" dev="proc" ino=4026533700 scontext=u:r:untrusted_app:s0:c512,c768 tcontext=u:object_r:proc:s0 tclass=file permissive=0
编辑:我添加到项目中的额外so文件
contains(ANDROID_TARGET_ARCH, armeabi-v7a) {
ANDROID_EXTRA_LIBS = \
C:/Users/yyyy/programs/Qt/android_camera/../../../3rdLibs/Android/android-ndk-r19c-windows-x86_64/android-ndk-r19c/platforms/android-28/arch-arm/usr/lib/libcamera2ndk.so \
C:/Users/yyyy/programs/Qt/android_camera/../../../3rdLibs/Android/android-ndk-r19c-windows-x86_64/android-ndk-r19c/platforms/android-28/arch-arm/usr/lib/libmediandk.so \
C:/Users/yyyy/programs/Qt/android_camera/../../../3rdLibs/opencv/opencv_4.1.2-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_java4.so
}
也许我错过了一些so文件?
解决方案
您需要要求用户在运行时授予对相机的访问权限。因此,使用Qt Android Extras模块中的QtAndroid,在第一次访问相机之前运行此代码
auto result = QtAndroid::checkPermission(QString("android.permission.CAMERA"));
if(result == QtAndroid::PermissionResult::Denied){
QtAndroid::PermissionResultMap resultHash = QtAndroid::requestPermissionsSync(QStringList({"android.permission.CAMERA"}));
if(resultHash["android.permission.CAMERA"] == QtAndroid::PermissionResult::Denied)
// do whatever need if denied
else
// do whatever need if granted
}
推荐阅读
- swing - 在不影响原始 JTable 的情况下更改用于打印的 JTable 布局
- html5-canvas - 文档准备就绪时,Fabric TextBox z-index 不正确
- android - Facebook Release Keyhash 中出现错误
- pycharm - 如何使用快捷方式创建新的 Python 文件 PyCharm
- javascript - 以角度 6 重试 HTTP 请求
- android - 使android键盘自动更正特定单词
- javascript - 递归函数没有以 return 语句结束?
- django - 如何在 django 中解密数据库中的加密数据?
- r - 同时 rvest 多个文本行
- javascript - 在 JavaScript 中使用 PHP 代码