Qt QAndroidActivityResultReceiver handleActivityResult() 没有收到来自 startActivityForResult 调用的活动的任何答复

问题描述 投票:0回答:1

函数 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")
        }
    }
}
android qt java-native-interface
1个回答
0
投票

我的错误是单独使用 QAndroidActivityResultReceiver 但是必须将他的指针传递给 QtAndroid::startActivity

void QtAndroid::startActivity(const QAndroidIntent &intent, int receiverRequestCode, QAndroidActivityResultReceiver *resultReceiver = nullptr)

© www.soinside.com 2019 - 2024. All rights reserved.