标签:qt for android qt on android 信鸽 推送 jni
推送是我们开发移动应用经常用到的功能,Qt on Android 应用也会用到,之前也有朋友问过,这次我们来看看怎么在 Qt on Android 应用中来集成来自腾讯的信鸽推送。
有关信鸽的 SDK 和集成指南,请到这里(http://xg.qq.com/)查看。本文是参考腾讯信鸽的在线帮助完成的。信鸽的 WIKI 和文档已经做得很好了,照着做就是,这里只讲 Qt 中集成信鸽时的步骤和注意事项。
这次我们要写一点点 Java 代码,就几行,如何做,可以参考《Qt on Android核心编程》一书,也可以参考我博客上的文章“Qt on Android:使用JNI与第三方jar包”。下面我就开讲了。
我使用 Qt SDK 5.3.1 ,在 Windows 平台上开发,信鸽版本 2.37 。
信鸽的 SDK 可以在 http://xg.qq.com/ 这里下载到。
信鸽的快速集成指南:点我去看啦。
这里如何快速集成就不说了,人家说得很明白。
这里是本文的重点。
我创建了一个简单的 Qt QWidgets App ,项目名字是 xgPushDemo ,具体过程略去,参考《Qt on Android核心编程》或者“Qt on Android:图文详解Hello World全过程”。
必须创建 AndroidManifest.xml 文件,这个可以用 Qt Creator 来完成。
创建之后,修改包名为 an.qt.xgPushDemo 。这个包名,我们在 xg.qq.com 上要用到,你在 xg 上创建应用时需要指定包名,必须和这里一致。
给你的应用指定一个图标,必须的,否则信鸽推送通知时,找不到应用图标,显示不出来。
好啦,下面是我的配置,供参考:
图 1 Qt Creator中修改AndroidManifest.xml
如图1所示,我改了包名,也设置了应用图标(偷信鸽demo的图标)。
接下来还要在 AndroidManifest.xml 中给信鸽增加一些配置,下图供参考:
图 2 为信鸽配置 AndroidManifest.xml
如图2所示,我标注了三处必须修改的地方,请注意。
还有一些权限的配置,我没有列出来,直接拷贝信鸽快速集成指南里的说明即可。
实际上我们这次要引入一个 Java 文件,定义了一个名为 QtPushDemoActivity 的类来作为我们应用的入口 Activity 。对应的,也需要修改 AndroidManifest.xml 文件。请打开 AndroidManifest.xml 文件,切换到 “XML Source” 模式直接修改,找到 <activity>标签,把 “andorid:name” 这个属性,修改为:
android:name="an.qt.xgPushDemo.QtPushDemoActivity"
信鸽 SDK 解压后,打开 “Xg-Push-SDK-Android-2.37\Xg-Push-SDK-Android\libs” 目录。如下图:
图3 信鸽SDK里的jar文件
我用红线标注的三个 jar 文件,必须要拷贝到我们的项目目录下。
android-support-v4.jar也拷贝一下。
我们创建了 AndroidManifest.xml 后,在项目根目录下会生成名为 Android 的文件夹,jar文件请拷贝到 android/libs 目录下。如下图所示:
图4 Qt项目目录下的jar文件
注意,Qt项目下的android目录内,默认没有 libs 子目录,自己建一个即可。
信鸽除了 jar 文件,还有两个 so 文件,必须要拷贝到Qt项目目录下。
so在“Xg-Push-SDK-Android-2.37\Xg-Push-SDK-Android\All-Platforms-SO”目录下,如图:
图5 信鸽so文件
如图5所示,直接把 armeabi 和 armeabi-v7a 都拷贝到 Qt 项目目录下。拷贝完成后如下图所示:
图6 Qt项目下的libs目录
好啦,集成信鸽SDK需要的文件就搞完了。关于 jar 、 so 等文件,我们只要按照这种目录结构放在那里,Qt Creator在编译、部署时就会把它们打包到APK中,而我们在 Java 代码中也可以直接访问它们。
要使用信鸽,必须在你的应用启动后注册service。这个动作要在 Java 代码中完成。
还记得我们的包名——“an.qt.xgPushDemo”——吗?进入项目目录下的 android 文件下,建立 “src\an\qt\xgPushDemo” 这样的目录层次,新建一个 QtPushDemoActivity.java文件。然后目录看上去是酱紫的:
图7 添加java文件
如图7所示,我们添加了一个QtPushDemoActivity.java文件。Java 源文件名和类名是必须一致的,所以,我们这里的 Activity 名字就是 QtPushDemoActivity ,而 src 文件夹内的目录结构,和包名又是一致的,“an/qt/xgPushDemo”对应 Java 代码里的包名为“an.qt.xgPushDemo”,就是我们之前修改 AndroidManifest.xml 时定的那个包名。
好啦,来看 QtPushDemoActivity.java 的内容:
package an.qt.xgPushDemo; import org.qtproject.qt5.android.bindings.QtActivity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.Log; import com.tencent.android.tpush.XGIOperateCallback; import com.tencent.android.tpush.XGPushConfig; import com.tencent.android.tpush.XGPushManager; public class QtPushDemoActivity extends QtActivity { private final static String TAG = "xgPushDemo"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Context ctx = getApplicationContext(); XGPushManager.registerPush(ctx, new XGIOperateCallback() { @Override public void onSuccess(Object o, int i) { Log.e(TAG, "register ok, token - " + o); } @Override public void onFail(Object o, int i, String s) { Log.e(TAG, "register failed, code - " + i + " message - " + s); } }); } }
Qt on Android 应用可以直接集成 java 代码,只要把代码放到与包名对应的目录结构下即可,无需在 pro 文件内做任何改动。
这里需要提一下,作为 Qt on Android 应用入口的 Activity,必须从 QtActivity 继承,这是因为 QtActivity 这个类完成了从 Java 过渡到 Qt 的动作,不用它,我们的 Qt 世界就无法呈现出来。关于这一点,具体的分析,请看《Qt on Android核心编程》的第13章——“Qt on Android揭秘”。
好啦,现在一切就绪,我们可以跑跑看喽。
如果你运行 xgPushDemo 示例,看到的界面如下:
图 8 xgPushDemo的丑样
图8说,我很丑,可是我很温柔,别听它的,它就是个摆设。我们要看的是推送哦。
呐,注意到我在 QtPushDemoActivity 的 onCreate 方法里的打印信息了吗?如果你运行示例,应该看到类似下面的输入:
图 9 注册信鸽服务成功
看到图9的信息,说明我们注册信鸽服务成功了!天才第一步,雀氏纸尿裤。哦,太激动了,现在用不着纸尿裤了。接下来就可以登录 xg.qq.com ,给应用推送通知了。
怎么登录?怎么推送?亲,信鸽的快速集成指南:点我去看啦。
我们这里可以看到效果如下:
图10 推送效果
嘿嘿,看到通知消息前面有个图标了吧,那是我偷信鸽Demo的,应用列表里也有呢,你看:
图11 应用列表
咦,这家伙很懒,应用名字都木改!不过如果你想改,去看“Qt on Android 之设置应用名为中文”吧。
好咧,在 Qt on Android 应用中集成信鸽推送,就讲到这里了。有了上面介绍的知识,常规的推送通知已经木问题了,哪怕你应用退出了,也可以收到服务端推送的通知,用户点击通知栏里的消息,就可以启动你的应用哦。
回顾一下:
标签:qt for android qt on android 信鸽 推送 jni
原文地址:http://blog.csdn.net/foruok/article/details/43836547