如何在安卓版Qt上获取应用程序参数

How to get application arguments on Qt for android

本文关键字:获取 应用程序 参数 Qt      更新时间:2023-10-16

我有一个Qt应用程序,它在AndroidManifest中定义了文件关联.xml所以当我在浏览器中选择一个文件时,我会得到一个相关应用程序的列表。我的应用程序在列表中,但是当我选择它时,文件路径不会在我的main()方法的argv列表中传递。如何将路径传递给应用程序,以及如何在Qt/C++中拥有它?

经过一些研究,我提出了以下工作解决方案:

void loadAndroidFile()
{
#ifdef Q_OS_ANDROID
    QAndroidJniObject activity = QtAndroid::androidActivity();
    if (activity.isValid()) {
        QAndroidJniObject intent = activity.callObjectMethod("getIntent", "()Landroid/content/Intent;");
        if (intent.isValid()) {
            QAndroidJniObject data = intent.callObjectMethod("getData", "()Landroid/net/Uri;");
            if (data.isValid()) {
                QAndroidJniObject path = data.callObjectMethod("getPath", "()Ljava/lang/String;");
                if (path.isValid())
                    // Here path.toString() returns the path of the input file
                    QMetaObject::invokeMethod(rootComponent, "setSourcePath", Q_ARG(QVariant, QVariant("file://" + path.toString())));
            }
        }
    }
#endif
}