QtAndroid详解(1):QAndroidJniObject

本文详细介绍了Qt 5.3.1中的QtAndroid名字空间中的QAndroidJniObject类,它是JNI编程的关键。文章讨论了如何构造Java对象,包括基于类名的构造函数和使用构造函数签名的方法。此外,还阐述了如何调用Java实例方法和类(静态)方法。通过示例代码展示了如何使用QAndroidJniObject进行实例和静态方法调用,为Qt on Android开发打下基础。
摘要由CSDN通过智能技术生成

    Qt 5.3之后,新增了 QtAndroid 名字空间,内有下列四个方法:

  • QAndroidJniObject AndroidActivity()
  • int androidSdkVersion()
  • void startActivity(const QAndroidJniObject & intent, int receiverRequestCode, QAndroidActivityResultReceiver * resultReceiver = 0)
  • void startIntentSender(const QAndroidJniObject & intentSender, int receiverRequestCode, QAndroidActivityResultReceiver * resultReceiver = 0)

    我的书《Qt on Android核心编程》写作时用的 Qt SDK 版本为 5.2.0(第一个正式支持Android的Qt SDK版本),写作过程中 5.3 发布,书里只是简单介绍了下 QtAndroid 的存在,对上面的几个方法没有做实际研究,从本文开始,我就以 Qt 5.3.1 为基础,来展开介绍 QtAndroid 名字空间以及与其密切相关的 QAndroidJniObject 。

QAndroidJniObject

    在介绍 QtAndroid 里面的方法之前,必须要介绍 QAndroidJniObject 这个类。因为要使用 Qt 提供的 JNI 功能编程,离开 QAndroidJniObject 可谓寸步难行。

    QAndroidJniObject 属于 androidextras 模块,要使用它,需要在 pro 文件中加入下面的代码:

QT += androidextras

    androidextras 是从 Qt 5.2 引入的。这个模块内还包括了 QAndroidJniEnvironment 类,QAndroidJniEnvironment 代表 JNI 环境,也就是通常我们使用 JNI 编程时的 JNIEnv 。我们使用 Qt 进行 JNI 编程时,构造一个 QAndroidJniEnvironment 对象,即可获得 JNIEnv 指针,可以进一步使用 JNIEnv 的方法来实现特定功能,比如检查 JNI 调用过程中是否发生了异常、清理异常等等。更多的细节请参考 Qt 帮助和 jni.h(JDK中有此头文件,可打开浏览) 。

    我们的重头戏是 QAndroidJniObject 。

    QAndroidJniObject 是对原始 JNI 类型的封装,代表了一个 Java 对象(类的实例),它提供了很多方法供开发者使用,我把它分为三类:

  • 构造一个 Java 对象
  • 调用 Java 静态(类)方法
  • 调用 Java 实例方法

    咱们一个一个来看。

构造 Java 对象

    要调用 Java 类库,就需要构造 Java 对象,这是第一步,可能也是最难的一步。不过相信随着本文的介绍,你很快就会清楚如何构造一个对应于 Java 对象的 JNI 对象。

    QAndroidJniObject 提供了下列构造函数来创建 JNI 对象:

  1. QAndroidJniObject
  • 9
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
QtAndroid::startActivity是一个Qt提供的Android平台相关功能的接口,用于在Qt应用程序中启动一个Android活动(Activity),即启动一个新的Android界面或打开一个已有的应用程序。它的主要作用是实现Qt应用与Android系统之间的交互。 使用QtAndroid::startActivity需要包含QtAndroidExtras模块,它提供了一些与Android平台相关的功能。 接口定义如下: ```c++ bool QtAndroid::startActivity(const QAndroidJniObject &intent, int requestCode = 0) ``` 其中,参数intent是一个QAndroidJniObject类型的对象,表示要启动的活动的意图(Intent),可以通过类似下面的代码创建: ```c++ QAndroidJniObject intent("android/content/Intent", "(Ljava/lang/String;)V", "android.intent.action.VIEW"); ``` 这里创建了一个意图,用于启动一个界面,实际上是启动了系统中已有的“浏览器”应用程序,其中"android.intent.action.VIEW"是启动浏览器应用程序的动作。 参数requestCode表示请求代码,用于标识启动活动的请求,可选参数,默认为0。如果启动活动时需要返回结果,则可以使用该参数,并在onActivityResult方法中根据requestCode进行处理。 需要注意的是,在使用QtAndroid::startActivity之前,需要先获取Activity的Java对象,例如: ```c++ QAndroidJniObject activity = QtAndroid::androidActivity(); ``` 然后再调用QtAndroid::startActivity方法启动活动。 总之,QtAndroid::startActivity是一个非常有用的接口,可以帮助我们在Qt应用中实现与Android系统的交互,如打开系统应用、调用系统服务、启动其他应用程序等。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

foruok

你可以选择打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值