在Qt打开Android目录的过程中,使用的是
QAndroidJniObject externalStorageDir = QAndroidJniObject::callStaticObjectMethod(
"android/os/Environment",
"getExternalStorageDirectory",
// "getExternalFilesDir",
"()Ljava/io/File;"
);
来获取默认文件目录,其路径为/storage/emulated/0
,然后使用QDir来访问该路径下的目录,最终发现控制台可以正常输出目录下的文件夹,但是无法输出目录下的文件。请问应该如何解决呢?是否是因为QDir无法识别Android文件呢?
在AndroidMainfest文件中,将android:requestLegacyExternalStorage="true"已经设置了,但是仍然无法识别文件
不知道你这个问题是否已经解决, 如果还没有解决的话:针对在Qt中使用QDir访问Android默认文件目录时能够访问到文件夹但无法访问文件的问题,可能是因为Android的文件访问权限问题。可以尝试使用Qt的androidextras库中提供的QAndroidJniObject类来获取外部存储的权限,以便访问Android的默认文件目录。
以下是具体解决方案:
QMAKE_LIBS_ANDROID_EXTRA += -lQt5AndroidExtras
#include <QAndroidJniObject>
#include <QtAndroid>
void requestPermission()
{
QtAndroid::PermissionResult r = QtAndroid::checkPermission(QString("android.permission.READ_EXTERNAL_STORAGE"));
if(r == QtAndroid::PermissionResult::Denied)
{
QtAndroid::requestPermissionsSync( QStringList() << "android.permission.READ_EXTERNAL_STORAGE" );
}
r = QtAndroid::checkPermission(QString("android.permission.WRITE_EXTERNAL_STORAGE"));
if(r == QtAndroid::PermissionResult::Denied)
{
QtAndroid::requestPermissionsSync( QStringList() << "android.permission.WRITE_EXTERNAL_STORAGE" );
}
}
void grantPermission()
{
QAndroidJniObject::callStaticMethod<void>("org/qtproject/example/QtAndroidPermissions/QtAndroidPermissions",
"grantPermissions",
"()V");
}
其中,requestPermission()函数用于申请读/写外部存储的权限,grantPermission()函数用于获取外部存储的权限,并且需要在AndroidManifest.xml中配置对应的权限。
#include <QDir>
QDir dir("/storage/emulated/0/Android/data/com.test.app/files/");
qDebug() << "dir exists:" << dir.exists();
qDebug() << "file count:" << dir.count();
QStringList files = dir.entryList(QDir::Files, QDir::NoSort);
foreach(QString file, files)
{
qDebug() << "file name:" << file;
}
其中,需要确保访问的路径是合法的,并且需要读写外部存储权限。通过设置QDir的过滤器和排序方法可以获取文件夹下所有文件的文件名,并进行相应的操作。
希望以上解决方案可以帮助您解决问题。如果还有问题,请尝试查看相关文档或者在社区中提问。