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界面。
- 那么你在AndroidManifest.xml中,设置一个activity窗口为
<action android:name="android.intent.action.MAIN"/>
,并且这个窗口的onCreate函数中,不添加setContentView(R.layout.activity_main);
代码。这样入口的时候,就会你写的C++的main函数中启动的QT原生窗口。 - 网上查阅过来,直接通过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);
}