Qt 6,Android 11 widget 应用,读写文件。权限被拒绝

问题描述 投票:0回答:0

希望能给我指明正确的方向,告诉我如何修复我的应用程序,这样我就可以读写一个简单的 .txt 文件。

我想我已经尝试了万维网上的所有解决方案,但我想告诉我应该尝试什么。

我尝试过的事情:

    bool value = QJniObject::callStaticMethod<jboolean>("android/os/Environment","isExternalStorageManager");
    if(!value){
        QJniObject filepermit = QJniObject::getStaticObjectField("android/provider/Settings","ACTION_MANAGE_APP_ALL_FILES_ACCES_PERMISSION","Ljava/lang/string;");
        //you must changing the YOURPKGNAME at below
        QJniObject pkgName = QJniObject::fromString("package:org.qtproject.example.robotinterfaceandroidqt");
        QJniObject parsedUri = QJniObject::callStaticObjectMethod(
                        "android/net/Uri",
                        "parse","(Ljava/lang/String;)Landroid/net/Uri;",
                         pkgName.object<jstring>());
        QJniObject intent("android/content/Intent",
                          "(Ljava/lang/String;Landroid/net/Uri;)V",
                          filepermit.object<jstring>(),parsedUri.object());
        QtAndroidPrivate::startActivity(intent, 0);
    }else{
        qDebug() << "NEW PERMISSION IS NOT GRANTED";
    }

这给了我一个允许访问的提示屏幕,但在允许访问所有文件时,它只是全灰色,不能设置为访问所有文件的权限。

我尝试过的另一件事:

int counter = 0;
bool permission(){
    auto result = QtAndroidPrivate::checkPermission("android.permission.MANAGE_EXTERNAL_STORAGE").result();
    if(result == QtAndroidPrivate::PermissionResult::Denied){
        result = QtAndroidPrivate::requestPermission(QString("android.permission.MANAGE_EXTERNAL_STORAGE")).result();
        counter++;
        if(counter > 10)
            qDebug() << "CANNOT GIVE THAT KIND OF PERMISSION";
        permission();
    }else{
        counter = 0;
        return true;
    }
return false;
}

也用

EXTERNAL_READ_STORAGE
尝试过,甚至用qts自己的
QtAndroidPrivate::Storage
写,但没有任何运气。

我正在使用 qt、cmake、sdk 31 构建面向 android 11 的应用程序,

更新和澄清。

在我的应用程序中,我尝试创建一个 txt 文件来保存 JSON 数据,它在设备上创建一个文件,但我无法打开和写入该文件。它给出的错误是

我尝试了以下权限请求:

auto result = QtAndroidPrivate::checkPermission("android.permission.MANAGE_DOCUMENTS").result();
if(result == QtAndroidPrivate::PermissionResult::Denied){
    result = QtAndroidPrivate::requestPermission(QString("android.permission.MANAGE_DOCUMENTS")).result();
  }

有什么想法吗?

整个文件的东西:

 QString  filename = QFileDialog::getSaveFileName();
filename = filename + ".txt";
qDebug() << "the file name is : " + filename;
ui->startPageProgramName->setText(test.toString());
auto result = QtAndroidPrivate::checkPermission("android.permission.MANAGE_DOCUMENTS").result();
if(result == QtAndroidPrivate::PermissionResult::Denied){
    result = QtAndroidPrivate::requestPermission(QString("android.permission.MANAGE_DOCUMENTS")).result();
  }
QFile file(filename);
if(!file.open(QIODevice::WriteOnly)){
    qDebug() << file.errorString();
    return;
}else{
QTextStream out(&file);
out << "QString::fromStdString(mainPro_->programToString())";
qDebug() << &out;
out.flush();
out << "testing som more";
out << "agian";
file.close();
}
android c++ qt android-permissions read-write
© www.soinside.com 2019 - 2024. All rights reserved.