上一篇,“QtAndroid详解(1):QAndroidJniObject”,我们做了好多好多准备工作,目的就是为使用 QtAndroid 名字空间里的 startActivity() 方法调用 Android 系统功能奠定基础。那这次呢,我们就要来研究如何使用 startActivity 方法了。
在我的书《Qt on Android核心编程》中,讲解 JNI ,介绍如何使用 JNI 扩展 Qt 应用时,是通过重写 QtActivity ,为我们的 Activity 加入静态方法来实现的,实际上从 Qt 5.3.0 以后,有更方便的方法,那就是接下来要介绍的 startActivity 了。
startActivity ,方法名字已经道出了它的功能:启动一个活动(Activity)。简单的说,在 Android 里,Activity就是布满整个窗口或者悬浮于其他窗口上的交互界面。通常用户可见的功能,都是与 Activity 关联的,比如我们用微信、微博、美团,我们看到的那些界面,可操作的东东,都是与 Activity 息息相关的。
行,背景就这么多吧,要是感兴趣,可以问下度娘,或者到 https://developer.android.com/index.html 上看看 Android 的在线文档。不过貌似打不开哈……
我们先详细介绍一下 startActivity 方法,然后再举例来看使用 startActivity 调用一个活动的两种情况。
startActivity方法详解
startActivity 方法原型如下:
void startActivity(const QAndroidJniObject & intent, int receiverRequestCode, QAndroidActivityResultReceiver * resultReceiver = 0);
如你所见,startActivity 有三个参数。
第一个是 intent ,我们在“QtAndroid详解(1):QAndroidJniObject”中举例时已经介绍了 Android 提供的 Intent 类,这里的 intent 参数实际上就是一个 Java Intent 对象。
第二个参数是 receiverRequestCode ,实际上是一个标识符,用来标记一次 startActivity 调用,当你启动一个 Activity 时,这个 request code 会传递过去,当你调用的 Activity 结束时,你会得到一个通知,这个通知里又把你传的 request code 带回给你,同时呢,这个通知还带回来你调用的那个 Activity 执行的结果,叫作 result code 。更厉害的是,你调用的 Activity ,还可以传递更多的数据回来,而这些数据呢,又是通过一个 Intent 携带的。
为了处理你调起的 Activity 的返回结果,在 Qt 代码中,我们需要一个 QAndroidActivityResultReceiver 对象,这就是第三个参数了。
实际上