У меня есть приложение Qt, в файле AndroidManifest.xml определены ассоциации файлов, поэтому при выборе файла в браузере я получаю список связанных приложений. Мое приложение находится в списке, но когда я выбираю его, путь к файлу не передается в argv
список в моем main()
метод. Как передается путь к приложению и как его можно получить в 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
}