qt for android - android extras - qt ui窗口跳转到android的activity

qt for android中,如果添加了/Other files/android模块,可以在QT中添加java代码。实现c++与java代码的调用。

QAndroidJniObject这个接口是实现c++调用java的关键。

比如想打开安卓中的设置界面。案例代码如下:

void HcSDKmainWindow::on_pushButton_clicked()
{
    QAndroidJniObject action = QAndroidJniObject::fromString("android.settings.SETTINGS");
    QAndroidJniObject intent("android/content/Intent","(Ljava/lang/String;)V", action.object<jstring>());
    startActivity(intent, 0);
}

自己在other files/android/src下,如果创建了一个activity.java,相当于创造了一个独立的android界面,且这个界面必须继承QtActivity。代码如下:
在这里插入图片描述
在AndroidManifest.xml中将窗口配置成:

<action android:name="android.intent.action.MAIN"/>

相当于开启程序的直接显示这个activity界面。若不添加,则不显示。

如果你自己在QT的C++代码中,写了一个QMainWindow窗口,且在main函数中启动他,理论上系统会优先启动JAVA代码中的activity界面。但是你如果按照上述代码这样。在onCreate(…)代码中没有添加窗口的xml。则程序启动时会显示c++的QMainWindow窗口。
想要启动时候直接启动java界面,代码做如下修改:

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);//全屏
       setContentView(R.layout.activity_main);

需要在onCreate中,添加配置的setContentView,表面加载哪个界面配置xml。
在这里插入图片描述



若是要启动APP时候,显示QT的原生UI界面,然后通过界面上的按钮,打开一个JAVA的activity界面。

  1. 那么你在AndroidManifest.xml中,设置一个activity窗口为<action android:name="android.intent.action.MAIN"/>,并且这个窗口的onCreate函数中,不添加setContentView(R.layout.activity_main);代码。这样入口的时候,就会你写的C++的main函数中启动的QT原生窗口。
  2. 网上查阅过来,直接通过c++打开一个窗口的代码如下(操作与启动安卓的设置界面相同,指定类,然后执行startActivity函数):
void HcSDKmainWindow::on_pushButton_clicked()
{
    //QAndroidJniObject action = QAndroidJniObject::fromString("android.settings.SETTINGS");
    QAndroidJniObject action = QAndroidJniObject::fromString("org.qtproject.androidhome.MyActivity");
    QAndroidJniObject intent("android/content/Intent","(Ljava/lang/String;)V", action.object<jstring>());
    startActivity(intent, 0);
}

直接打开会报错,无法打开一个android原生的activity窗口。
3. 新建一个activity的代码。在oncreate中设置xml配置。setContentView(R.layout.activity_main);
通过qt-c++启动一开始创建的activity,那个没有窗口xml配置的窗口。然后通过那个窗口代码,启动新创建的activity。

C++代码如下:

void HcSDKmainWindow::on_hcsdk_btn_clicked()
{
    QtAndroid::runOnAndroidThreadSync([=](){
        QAndroidJniObject act = QtAndroid::androidActivity();
        act.callMethod<void>("showHcSdkAct", "()V");
    });
}

JAVA代码如下:
在一开始创建的activity中,创建新开启的安卓界面。

public void showHcSdkAct() {
        Intent intent = new Intent(MyActivity.this, hcsdkActivity.class);
        startActivity(intent);
    }
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值