在QT android上创建一个目录,可以在手机上看到它,但无法在计算机上看到它

时间:2015-05-06 04:07:46

标签: android qt

我在android mobile上创建了一个文件夹。

这是我的代码:

QDir mypath(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation));
    if(!mypath.cd("Plugin"))
    {
        if(mypath.mkdir("Plugin"))
            qDebug() << "path created";
        else
            qDebug() << "path not created";
    }

我在手机上打开文件管理器,我可以看到该文件夹​​已经创建。但当我将手机连接到PC的方向与文件夹没有显示的方向相同时。

问题出在哪里?谢谢

1 个答案:

答案 0 :(得分:0)

您必须为您创建的所有文件调用MediaScannerConnection.scanFile。

例如,

Nexus 4 not showing files via MTP

调用java函数可以编写以下内容

#include <QAndroidJniObject>

void  CAndroid::rescanFolder(QString dest)
{

    QAndroidJniObject java_app("org/programm/java_app");

    QAndroidJniObject param = QAndroidJniObject::fromString(dest);

    java_app.callMethod<jint>("rescanFolder","(Ljava/lang/String;)I",param.object<jstring>());

}

并修改java代码

int rescanFolder(String dest) {

    File[] files = new File(dest).listFiles(new FileFilter() {
        @Override
        public boolean accept(File pathname) {
            return pathname.isFile();
        }
    });

    if(files!=null)
    {

        String[] paths = new String[files.length];
        for (int co=0; co< files.length; co++)
        {
            paths[co] = files[co].getAbsolutePath();

        }

        MediaScannerConnection.scanFile(QtNative.activity(), paths, null, null);


        files = new File(dest).listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {

                return pathname.isDirectory();
            }
        });

        for (int co=0; co<files.length; co++)
            rescanFolder(files[co].getAbsolutePath());
    }
    return 0;
}