在安卓设备上找不到使用 QStandardPath 创建的文件

Cannot find files created using QStandardPath on android device

本文关键字:QStandardPath 创建 文件 找不到      更新时间:2023-10-16

我正在使用Qt 5.15.0在Android上开发一个应用程序。我的应用程序使用QStandardPaths::AppDataLocation创建一个数据库和一些其他文件。从代码端一切正常:调试输出让我认为文件在那里并且应用程序正在使用它们。问题是,当我从智能手机文件夹内的PC搜索时,我找不到创建的文件。所以这让我觉得我没有写到我期望的文件夹。

这是我的代码:

appDataPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
QDir directory;
if (!directory.exists(appDataPath + QStringLiteral("/DATABASE")))
directory.mkpath(appDataPath + QStringLiteral("/DATABASE"));
if (!directory.exists(appDataPath + QStringLiteral("/DATA")))
directory.mkpath(appDataPath + QStringLiteral("/DATA"));
qDebug() << "Percorso: " << appDataPath << " dir exists:" << directory.exists(appDataPath + QStringLiteral("/DATABASE"));
QFile f( appDataPath + "/DATABASE/Prova.txt"  );
if( f.open( QIODevice::WriteOnly ) )
{
f.write( "Ciao" );
f.close();
}
if( f.error() != QFileDevice::NoError )
qDebug() << QString("Error writing file '%1':").arg(appDataPath + "/DATABASE/Prova.txt") <<  f.errorString();

我还编写了一个在启动时读取的文件,我可以从中读取,因此我假设该文件存在并且不会保存为临时文件。 输出为:

D/MyApp(17849): Percorso:  "/data/data/org.qtproject.example/files"  dir exists: true

现在我想我可以在这个文件夹中的手机内部的这个目录中找到我的文件:

Questo PCSamsung Galaxy J3 (2016)PhoneAndroiddataorg.qtproject.examplefiles

但是里面没有目录或文件。我敢打赌我错过了一些琐碎的事情。

我授予应用程序以下权限:

android.permission.WRITE_EXTERNAL_STORAGE
android.permission.READ_EXTERNAL_STORAGE

有人可以帮助我吗? 提前感谢!

似乎

QStandardPaths::AppLocalDataLocation, QStandardPaths::AppDataLocation

不要提供应用文件夹的正确路径。我在Qt 5.14.1中遇到了同样的问题。虽然QStandardPaths给了我

/data/user/0/com.mycompany.myapp/files

通过QAndroidJniObject对Java端的调用给了我

/storage/emulated/0/Android/data/com.mycompany.myapp/files

使用后者,所有目录和文件都已正确创建。我建议尝试我的解决方法

QtNative.activity().getExternalFilesDir(null).getAbsolutePath();

在添加的java类中,并通过QAndroidJniObject调用它,或者将其作为错误报告给Qt。 尽管如此,对于我不知道的问题,可能还有另一种解决方案。