我正在开发一个Qt应用程序,并依靠QAndroidJniObject
类与底层java层进行交互。我想要一个按钮在我的应用程序打开android设置管理器。我暂时的解决方案是创建一个意图,设置它的动作,并启动一个活动与该意图:
const QAndroidJniObject action = QAndroidJniObject::fromString("android.provider.Settings.ACTION_SETTINGS");
QAndroidJniObject intent = QAndroidJniObject("android.content.Intent");
intent.callObjectMethod("setAction", "(Ljava/lang/String;)Landroid/content/Intent;", action.object<jstring>());
QtAndroid::startActivity(intent.object<jobject>(), requestType, this);
然而,当我从qml按钮调用该函数时,应用程序崩溃了
JNI DETECTED ERROR IN APPLICATION: JNI NewString called with pending exception android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.provider.Settings.ACTION_SETTINGS }
此外,对于其他活动,例如打开文档,通过将前面代码中的第1行替换为:
const QAndroidJniObject action = QAndroidJniObject::fromString("android.content.Intent.ACTION_OPEN_DOCUMENT");
。
我的理解是操作系统正在寻找一个能够执行指定操作的活动,并且这两个操作都可以由操作系统本身的基本活动自动执行,但这似乎不是真的。我错过了什么?
我发现了错误,我没有正确创建action
。因为我使用QAndroidJniObject::fromString
,我应该把动作值作为字符串传递,而不是动作名称。因此,根据文档,正确的参数是"android.settings.SETTINGS"
(即变量的值),而不是它的名称"android.provider.Settings.ACTION_SETTINGS"
。