Qt / QML Android最佳实践发送自定义Intent(共享URL)

时间:2014-03-26 20:37:34

标签: android qt android-intent share qml

我想知道是否有任何关于从QML(或c ++)发送自定义Android意图的最佳实践技巧。

我应该创建一个自定义的android活动并使用QAndroidJniObject类来调用它还是有更好的方法?

我的目的是创建一个简单的共享URL功能,从QML到其他Android应用程序。

感谢

1 个答案:

答案 0 :(得分:6)

使用其他静态方法扩展QtActivity:

package org.whatever

public class YourActivity extends org.qtproject.qt5.android.bindings.QtActivity
{
    private static YourActivity instance;

    YourActivity() {
        instance = this;
    }

    public static void shareUrl(QString url) {
        //create intent here
        //can use instance object
    }
}

在c ++端使用QAndroidJniObject调用shareUrl方法

class QmlInterface : public QObject
{
    Q_OBJECT
    public:
        QmlInterface();
        Q_INVOKABLE void shareUrl( QString url );
};

和实施:

void QmlInterface:: shareUrl( QString url )
{
#ifdef Q_OS_ANDROID
    QAndroidJniObject::callStaticMethod( "org/whatever/YourActivity",
                                         "shareUrl",
                                         "(Ljava/lang/String;)V",
                                         QAndroidJniObject::fromString( url ));
#endif
}

在java端使用静态方法可以显着简化jni调用,因为您不必获取Activity实例。因为需要Activity上下文来发送Intent static 实例在java端使用成员对象。