Qt on Android 调用安卓原生方法

标题c++与java混合编程

1.先用安卓编译器编译一次,在android-build目录下找到AndroidManifest.xml。
2.在项目路径下创建 android/src/ 目录
3.将AndroidManifest.xml拷贝到 android/src下
4.在android/src下创建com 目录,并手动写一个QtAndroidTest.java 文件到com 目录
5.将上面两个文件添加的QT工程中,并在pro文件中添加ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
6.将AndroidManifest.xml用普通文本编辑器打开,将 activity 下面的
android:name=“com.QtAndroidTest.QtAndroidTest” 修改成这样
Qt on Android 调用安卓原生方法_第1张图片
工程项目截图:
Qt on Android 调用安卓原生方法_第2张图片
调用:以调用安卓Toast 为例
此时:
QtAndroidTest.java文件内容为:

package com.QtAndroidTest;
import android.content.Intent;
import android.widget.Toast;
import android.os.Handler;
import android.os.Message;
import org.qtproject.qt5.android.bindings.QtActivity;

public class QtAndroidTest extends org.qtproject.qt5.android.bindings.QtActivity
{
    private static QtAndroidTest m_instance;
        private static Handler m_handler = new Handler() {
             @Override
             public void handleMessage(Message msg) {
                 switch (msg.what) {
                 case 1:
                     Toast toast = Toast.makeText(m_instance,(String)msg.obj, Toast.LENGTH_SHORT);
                     toast.show();
                     break;
                 };
             }
         };
         public QtAndroidTest(){
                 m_instance = this;
             }
         public static void makeToast(String s){
             m_handler.sendMessage(m_handler.obtainMessage(1, s));
         }
}

在QT中调用:

在头文件中包含
#ifdef Q_OS_ANDROID
#include
#include
#endif
// 在cpp 文件中调用
  QAndroidJniObject javaToast = QAndroidJniObject::fromString("QT调用Android原生Toast");
  QAndroidJniObject::callStaticMethod<void>("com/QtAndroidTest/QtAndroidTest",
                                                  "makeToast",
                                                  "(Ljava/lang/String;)V",
                                                  javaToast.object<jstring>());

你可能感兴趣的:(QT,C++,qt)