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

Posted

技术标签:

【中文标题】在 android 设备上找不到使用 QStandardPath 创建的文件【英文标题】:Cannot find files created using QStandardPath on android device 【发布时间】:2020-06-26 09:53:50 【问题描述】:

我正在使用 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 PC\Samsung Galaxy J3 (2016)\Phone\Android\data\org.qtproject.example\files

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

我正在授予应用这些权限:

android.permission.WRITE_EXTERNAL_STORAGE
android.permission.READ_EXTERNAL_STORAGE

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

【问题讨论】:

【参考方案1】:

好像

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。 不过,对于我不知道的问题,可能还有另一种解决方案。

【讨论】:

以上是关于在 android 设备上找不到使用 QStandardPath 创建的文件的主要内容,如果未能解决你的问题,请参考以下文章

Android 市场 - 在没有蓝牙的特定设备上找不到应用程序

在 Android TV 上找不到应用程序

Flutter 在 Windows 10 上找不到名称或 ID 与“chrome”匹配的设备

扫描提供特定服务的外围设备,但在发现的外围设备上找不到服务

在 Facebook SDK Android 上找不到文件“com.facebook.android.facebook”

在 Mac 上找不到 SDK 位置?