Qt Android 申请写文件到内部存储

本文讲述了在项目中如何在Android环境下处理软件配置文件的保存问题,由于权限限制,需在UPCNC3.pro中添加Android扩展模块并申请WRITE_EXTERNAL_STORAGE权限,以便在/emulated/0目录下读写文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

在项目中我们有一个软件配置文件,在软件更新一些配置后需要将配置信息保存到配置文件中,Windows 下是将配置文件保存到软件当前目录下,但是 Android 环境下无法保存到程序当前目录,最终只能将配置文件保存到内部存储中(平板的存储器)。

Android 写文件是需要申请权限的。

解决方案

  1. 在 UPCNC3.pro 中添加 Android 扩展模块。
android {
QT += androidextras
}

  1. main.cpp 头部添加头文件。
#ifdef __ANDROID__
#include <QtAndroid>
// 在 UPCNC3.pro 中没有添加模块时可以直接这样引用头文件
// #include <QtAndroidExtras/QtAndroid>
#endif

  1. 写一个函数申请写文件权限,在平板上运行时会弹窗申请权限。
#ifdef __ANDROID__
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;
}
#endif

  1. main 函数中调用申请权限函数,之后就可以在 /storage/emulated/0 目录下读写文件了。
int main(int argc, char *argv[])
{
#ifdef __ANDROID__
    if(checkPermission())
        return -1;
    QString appPath = "/storage/emulated/0/UPCNC3";
    QDir dir(appPath);
    if(!dir.exists()) {
        qInfo() << "create " << appPath << dir.mkdir(appPath);
    }

    // 如果校准脚本不存在,复制校准脚本
    QString scriptPath = "/storage/emulated/0/UPCNC3/script";
    if(!QFile::exists(scriptPath + "/Calculate.lua"))
        copyDirectory("assets:/script/", scriptPath);
#endif
    //...
}

### 使用Qt开发Android应用的基础指南 #### Qt简介及其适用范围 Qt作为一种跨平台的C++开发框架,适用于构建多种类型的应用程序,其中包括Android应用程序[^1]。通过这种方式,开发者能够创建高效且兼容性强的应用。 #### 实现机制——JNI的作用 由于Qt主要依赖于C/C++代码库而Android原生环境则更多围绕Java展开,在这两者间建立联系便显得尤为重要。为此,当涉及到调用底层硬件特性或其他特定于Android的功能时,通常会采用JNI(Java Native Interface),它充当了连接这两个不同世界的桥梁[^2]。这使得即使是在不完全支持某些特性的前提下,仍然可以通过间接手段获取所需能力。 #### 构建流程概述 对于希望快速入门的人来说,理解整个编译打包过程也是必不可少的一部分。实际上,最终生成的应用会被封装成`.apk`文件形式保存在项目结构内的指定位置,比如`android/bin/Yiyaaixuexi-debug.apk`这样的路径下[^3]。 #### 设置开发环境前准备事项 为了顺利开展基于QtAndroid应用开发工作,还需要确保安装并配置好必要的软件组件。具体来说,应该先设置好JDK路径,接着按照提示完成SDK以及NDK的选择与下载操作;这一系列步骤可以在Qt Creator集成开发环境中找到相应菜单项来进行设定[^5]。 ```bash # 打开Qt Creator后按如下顺序进入设置页面 Tools -> Options -> Devices -> Android ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ALONE_WORK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值