最近抽空研究了下Qt 开发android应用 如何调用android api,发现其实我们还得写java代码,java代码主要实现功能,再使用Qt封装好的android类去调用
群内经常有人问到Qt如何调用android api,不知道是Qt官方给的例子太少,还是拿来主义在作怪,其实我在QtCreator找到了一个例子就是关于如何调用Android API的,它就是
例如基于我的安装Qt的目录得到的例子是C:\Qt\Qt5.2.1\5.2.1\mingw48_32\examples\androidextras下面有个notification的例子,就是Qt应用通过调用Android API将通知发送到
安卓的通知栏,不信大家可以试试,基于QML的一个应用。
 基于这个例子我简单说下里面的内容
   
#include "notificationclient.h"
   
#include 
   
NotificationClient::NotificationClient(QObject *parent)
: QObject(parent)
{
connect(this, SIGNAL(notificationChanged()), this, SLOT(updateAndroidNotification()));
}
   
void NotificationClient::setNotification(const QString ¬ification)
{
if (m_notification == notification)
return;
   
m_notification = notification;
emit notificationChanged();
}
   
QString NotificationClient::notification() const
{
return m_notification;
}
   
void NotificationClient::updateAndroidNotification()
{
QAndroidJniObject javaNotification = QAndroidJniObject::fromString(m_notification);
QAndroidJniObject::callStaticMethod<void>("org/qtproject/example/notification/NotificationClient",
                               "notify",
                               "(Ljava/lang/String;)V",
                               javaNotification.object());
}
updateAndroidNotification这个方法就是如何调用java文件的
CallStaticMethod<void>这个方面里面第一个参数是java文件的位置,第二个参数是这个java类的一个方法,第三个参数这个方法里面的参数类型,第四个就是方法里面的参数。
其实学过java,对这些应该了如指掌,我是java门外汉,呵呵,要用的时候去看下Android API的文章而已。
这个槽函数一调用就可以在真机或模拟器里面的通知栏看到Qt应用发的通知
下面我贴出java代码看看吧
   
package org.qtproject.example.notification;
   
import android.app.Notification;
import android.app.NotificationManager;
import android.content.Context;
   
public class NotificationClient extends org.qtproject.qt5.android.bindings.QtActivity
{
    private static NotificationManager m_notificationManager;
    private static Notification.Builder m_builder;
    private static NotificationClient m_instance;
   
    public NotificationClient()
    {
        m_instance = this;
    }
   
    public static void notify(String s)
    {
        if (m_notificationManager == null) {
            m_notificationManager = (NotificationManager)m_instance.getSystemService(Context.NOTIFICATION_SERVICE);
            m_builder = new Notification.Builder(m_instance);
            m_builder.setSmallIcon(R.drawable.icon);
            m_builder.setContentTitle("A message from Qt!");
        }
   
        m_builder.setContentText(s);
        m_notificationManager.notify(1, m_builder.build());
    }
}

Java代码首先这个类就是类似Qt的继承QtActivity的java类,这个基础类安装目录里面找得到。
首先引入了安卓的管理通知的对象和某个通知对象。
其次 定义了一个静态方法就做notify,还传入了一个String的参数
里面的部分代码应该可以看懂,就是首先实例一个管理通知的对象,还是new一个通知对象
通知对象设置了各种属性和参数,比如setSmallIcon就是添加通知栏的一个图标,setContentTitle就是标题
setContentText就是设置通知的内容,自定义,其实标题也可以自定义
然后就是管理通知的对象发出通知
另外有人提到如何在Qt 安卓应用里面使得手机震动,我猜想肯定得调用安卓api
手机振动,例如:
notification.defaults |= Notification.DEFAULT_VIBRATE;
   
  long[] vibrate = {0,100,200,300};
   
  notification.vibrate = vibrate;
  手机声音:
  notification.defaults |= Notification.DEFAULT_SOUND;
   
   
  notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");
   
   
  notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6");
  关于安卓一些附加额外的功能,可以参考Android 通知


更多相关文章

  1. 【IOS和Android】Cocos2d-x 集成微信分享功能
  2. Android搜索控件的基本使用方法
  3. android静默安装探讨(申请加精)
  4. Android(安卓)中的 Service 全面总结
  5. Android(安卓)View 的刷新机制
  6. Android(安卓)JNI入门
  7. Android(安卓)Binder概述
  8. ART深度探索开篇:从Method Hook谈起
  9. Android与WebView的同步和异步访问机制

随机推荐

  1. android中用XMPP Asmack获取用户朋友的pr
  2. android 拼音字母搜索联系人以及实现多选
  3. Android 开发小技巧1: Button 点击区域过
  4. android之NDK环境小试牛刀
  5. 【Android】自定义View之Canvas的使用
  6. android 屏幕旋转 重新调用onCreate
  7. 搭建 Android 开发环境,初试HelloWorld (w
  8. ADB 命令大全
  9. 因占用IP地址 普林斯顿大学屏蔽Android设
  10. Android获取屏幕宽高要注意的问题