fzw003 |
2019-12-19 11:59 |
Qt for Android 调用原生Activity 三步走,开启android的潘多拉世界。
花了一天时间开启这个hellowrld.所有的东西都复制黏贴了就是调用不到原生的。哎那些写书的大佬能不能多填点坑,这条路子实在是太艰难了。还没开始就结束了。望而却步。现在就让我把这个小坑填掉吧。 1.android studio 的应用文件拷贝到Qt 工程android目录下 主要有src和res 下的layout //这个也很重要. 2.配置Qt AndroidMainfest.xml 添加注册你自定义的activity例如: <activity android:name="com.demo.testactivity.MainActivity" android:label="-- %%INSERT_APP_NAME%% --" android:screenOrientation="unspecified" android:launchMode="singleTop"> <meta-data android:name="android.app.lib_name" android:value="-- %%INSERT_APP_LIB_NAME%% --"/> <intent-filter> <action android:name="com.demo.testactivity.MainActivity"/>//防止万一吧。 <category android:name="android.intent.category.DEFAULT"/> //有遇到问题的细品 </intent-filter></activity> 3 //这个是拷贝某大佬的代码修改修改。 #define CHECK_EXCEPTION() \ if(env->ExceptionCheck())\ {\ qDebug() << "exception occured";\ env->ExceptionClear();\ } void Widget::on_pushButton_clicked() { QAndroidJniEnvironment env; QAndroidJniObject action = QAndroidJniObject::fromString("com.demo.testactivity.MainActivity"); QAndroidJniObject intent("android/content/Intent","(Ljava/lang/String;)V", action.object<jstring>()); QtAndroid::startActivity(intent, 0);//有遇到问题的细品 CHECK_EXCEPTION()//这里可有可无,但是人家大佬都这么用了。那就加上吧。便于debug } 走到这里你发现诶怎么qt原生界面无论怎么跳转都跳转不到java的原生界面是不是开始各种怀疑各种骂爹,什么狗屁不通代码,TMD GRD 我要放弃...,android要么原生。什么qt for android 去你麻痹的就是个鸡肋。。。。我真的要放弃了。要不我们在试试。。。认真观察下列划掉的两行代码。。。。至于什么原因呢debug应该会知道原因。 package com.demo.testactivity; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.util.Log;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity { public class MainActivity extends Activity {//有遇到问题的细品 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); System.out.println("hello world"); } } 运行,跳转。。。hello world happly enjoy |
|