函数 CallActivity::runApplication 通常通过 startActivityForResult 启动其他应用程序的活动,当我在被调用的活动中按下按钮并通过 setResult(RESULT_OK, intent) 将结果返回到调用应用程序时;函数 CallActivity::handleActivityResult 必须已收到答复,但未返回任何内容。当我从 Android Studio 应用程序调用应用程序时,我正常收到答复。 handleActivityResult 有什么问题?我如何通过 handleActivityResult 在 Qt 应用程序中收到答案?安卓 7.1、Qt 5.15.2
callactivity.h 类继承自类 CallActivity : public QObject, public QAndroidActivityResultReceiver!!!
class CallActivity : public QObject, public QAndroidActivityResultReceiver
{
Q_OBJECT
public:
explicit CallActivity(QObject *parent = nullptr);
Q_INVOKABLE void runApplication(const QString &packageName, const QString &className);
void handleActivityResult(int receiverRequestCode, int resultCode, const QAndroidJniObject &data) override;
};
callactivity.cpp
void CallActivity::runApplication(const QString &packageName, const QString &className)
{
QAndroidJniObject activity = QAndroidJniObject::callStaticObjectMethod(
"org/qtproject/qt5/android/QtNative", "activity",
"()Landroid/app/Activity;");
QAndroidJniObject jPackageName = QAndroidJniObject::fromString(packageName);
QAndroidJniObject jClassName = QAndroidJniObject::fromString(className);
QAndroidJniObject intent("android/content/Intent","()V");
intent.callObjectMethod("setClassName",
"(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;",
jPackageName.object<jstring>(),jClassName.object<jstring>());
QAndroidJniEnvironment env;
activity.callMethod<void>(
"startActivityForResult",
"(Landroid/content/Intent;I)V",
intent.object<jobject>(),1);
}
void CallActivity::handleActivityResult(int receiverRequestCode, int resultCode, const QAndroidJniObject &data) //isn't called!!!!
{
qDebug()<<"handleActivityResult"<<receiverRequestCode<<resultCode; //!!!!!RECEIVED NOTHING
}
main.qml
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
Button {
onClicked: {
clcallActivity.runApplication("com.my.startactivityforres",
"com.my.startactivityforres.ActivityDate")
}
}
}
我的错误是单独使用 QAndroidActivityResultReceiver 但是必须将他的指针传递给 QtAndroid::startActivity
void QtAndroid::startActivity(const QAndroidIntent &intent, int receiverRequestCode, QAndroidActivityResultReceiver *resultReceiver = nullptr)