从Android5.0以后开始,谷歌开始限制了android中系统的运行时权限,对于涉及到用户隐私的权限则需要开发者自己动态的去申请,并做好相应的处理 由于android 队伍的壮大,延伸出了很多方便使用的第三方库,在这里就不累述,但Qt作为一个跨平台的语言针对这点的更新还是不太及时,需要我们自己是实现,主要实现方案这里列举两种
一)Qt c++ 通过jni 调用java方法 采用android原生的方法进行实现
二)通过本文中的工具类实现 实现的前提是Qt版本需要在5.8以上
第一步:
在项目的pro文件中
QT += androidextras
QT += core-private
HEADERS += permissions.h
SOURCES += permissions.cpp
第二步:添加工具类文件
工具类下载地址 单击下载后,添加到自己项目中
第三步:调用工具类方法申请权限
bool checkPermission() {
QtAndroid::PermissionResult r = QtAndroid::checkPermission("android.permission.WRITE_EXTERNAL_STORAGE");
if(r == QtAndroid::PermissionResult::Denied) {
QtAndroid::requestPermissionsSync( QStringList() << "android.permission.WRITE_EXTERNAL_STORAGE" );
r = QtAndroid::checkPermission("android.permission.WRITE_EXTERNAL_STORAGE");
if(r == QtAndroid::PermissionResult::Denied) {
return false;
}
}
return true;
}
这里以读写SDCard权限为例 申请,在使用的地方调用该方法即可验证。
本文并非原创,由于解决此问题,搜寻很久,找到解决方法,原文地址: https://bugreports.qt.io/browse/QTBUG-50759 希望能帮遇到相关问题的人,有问题请留言。