美文网首页
Qt for Android 动态申请权限

Qt for Android 动态申请权限

作者: 蓝点工坊 | 来源:发表于2018-07-30 19:33 被阅读42次

    一.Android 6.0权限机制

    在Android 6.0 关在AndroidManifest.xml 静态申请权限不够.
    需要运行时,用代码申请才能打开相应权限.

    否则只让用户手动在设置找到应用打开相应权限,才能工作.体验非常之差.

    比如蓝牙程序在6.0必须有定位权限的才能打开,但是Qt Android的动态申请定位权限请求时灵时不灵,有时运行很长时间均请求.

    原生java 动态请求代码很容易,但Qt 需要处理工作

    二.解决办法

    参考 https://blog.csdn.net/zdc9023/article/details/79209297

    https://bugreports.qt.io/browse/QTBUG-50759

    如果是Qt 5.10 以前版本需要加入如下补丁
    需下载如下 https://bugreports.qt.io/secure/attachment/65420/permission_patch_5_9.zip

    第一步:

    在项目的pro文件中

    QT += androidextras
    QT += core-private
    
    #Qt 5.10以上版本不需要加入这两个文件
    
    HEADERS += permissions.h 
    SOURCES += permissions.cpp 
    

    第二步:添加工具类文件
    Qt 5.10 版本以下才需要
    permissions.cpp/h 加入项目

    代码处理

    
    #include <QtAndroid>
    
    bool BT8510Device::checkPermission(const QString &permission)
    {
    #ifdef Q_OS_ANDROID
    
    
        QtAndroid::PermissionResult r = QtAndroid::checkPermission(permission);
           if(r != QtAndroid::PermissionResult::Granted) {
               QtAndroid::requestPermissionsSync( QStringList() << permission );
               r = QtAndroid::checkPermission(permission);
               if(r == QtAndroid::PermissionResult::Denied) {
                    return false;
               }
          }
    
    #else
        return true;
    #endif
    

    其中permssion 权限来自于Android 定义字符串,需要一查即知

    如果

    #define ACCESS_COARSE_LOCATION "android.permission.ACCESS_COARSE_LOCATION"
    #define WRITE_EXTERNAL_STORAGE
    "android.permission.WRITE_EXTERNAL_STORAGE"
    

    相关文章

      网友评论

          本文标题:Qt for Android 动态申请权限

          本文链接:https://www.haomeiwen.com/subject/ghzfvftx.html