一个人的成功是岁月的积累和众人乐善好施的结果,我们尊敬那些无私奉献的人,更尊重那些持之以恒的大无畏开拓者.老子狗屁不是,但是为了更多人的成功,无论如何要把成果分享出来,感谢糊涂李哥以及那些帮助我的人

Qt开发android主要是借用JNI技术,让我们能够调用android(java代码)的一些方法,从而实现对多平台的兼容,下面我们以具体的实例来一步步学习如何用qt开发android应用(完整代码在下方链接).需要注意的是,qt的线程和android(调用的java代码)不在同一个线程,是异步处理的,所以直接从java中获取返回值需要注意异步调用这个特性

1、震动效果

震动效果主要调用了android的vibrate服务,对应android.os.Vibrator类。切记添加android.permission.VIBRATE权限

void Widget::onVibrate()
{
#ifdef Q_OS_ANDROIDQAndroidJniObject activity = androidActivity();QAndroidJniObject name = QAndroidJniObject::getStaticObjectField("android/content/Context","VIBRATOR_SERVICE","Ljava/lang/String;");QAndroidJniObject vibrateService = activity.callObjectMethod("getSystemService","(Ljava/lang/String;)Ljava/lang/Object;",name.object<jstring>());jlong duration = 200;vibrateService.callMethod<void>("vibrate", "(J)V", duration);
#endif
}

2、屏幕旋转

屏幕旋转无需添加任何权限,下面展示的是手动控制自旋,对应android.app.Activity 类,设备感应旋转的后续添加

void Widget::onScreenOrientation()
{
#ifdef Q_OS_ANDROIDQAndroidJniObject activity = androidActivity();jint orient = activity.callMethod<jint>("getRequestedOrientation");orient = (1 == orient)? 0:1;activity.callMethod<void>( "setRequestedOrientation", "(I)V", orient);
#endif
}

3、铃声模式

来电铃声有三种基本模式,分别是响铃、震动和静音,对应着android.media.AudioManager 类

void Widget::onSetRingMode(int iMode)
{
#ifdef Q_OS_ANDROIDQAndroidJniObject activity = androidActivity();QAndroidJniObject name = QAndroidJniObject::getStaticObjectField("android/content/Context","AUDIO_SERVICE", "Ljava/lang/String;");QAndroidJniObject audioService = activity.callObjectMethod("getSystemService","(Ljava/lang/String;)Ljava/lang/Object;",name.object<jstring>());audioService.callMethod<void>( "setRingerMode", "(I)V", iMode);//获取当前铃声模式//iMode = audioService.callMethod<jint>("getRingerMode", "()I");
#endif

4、屏幕常亮

这个功能主要用于一些类似播放视频不息屏或者音乐播放歌词等场景,主要是用android的电源管理类ndroid.os.PowerManager,这个需要添加权限WAKE_LOCK和DEVICE_POWER

void Widget::onKeepScreenLight(int iStatus)
{
#ifdef Q_OS_ANDROIDif(Qt::Unchecked == iStatus){if(m_wakeLock.isValid()){m_wakeLock.callMethod<void>("release");CHECK_EXCEPTION();}return;}QAndroidJniObject name = QAndroidJniObject::getStaticObjectField("android/content/Context","POWER_SERVICE","Ljava/lang/String;");QAndroidJniObject activity = androidActivity();QAndroidJniObject powerService = activity.callObjectMethod("getSystemService","(Ljava/lang/String;)Ljava/lang/Object;",name.object<jstring>());QAndroidJniObject tag = QAndroidJniObject::fromString("QtJniWakeLock");m_wakeLock = powerService.callObjectMethod("newWakeLock","(ILjava/lang/String;)Landroid/os/PowerManager$WakeLock;",10,tag.object<jstring>());if(m_wakeLock.isValid()){m_wakeLock.callMethod<void>("acquire");}
#endif
}

源代码链接

Qt开发Android范例详入门详解相关推荐

  1. qt有什么android应用程序,Qt开发Android APP之微信应用

    android手机现在使用得比较普遍了,网上各种各样五花八门的应用极大地丰富了手机党们的精神生活,说到手机应用,微信可以说是当仁不让的老大,路边.公交.地铁,随处可见人们不停地用手指划拉着屏幕,刷着朋 ...

  2. qt开发教程视频c++入门自学qt5.5课程linux gui程序实战案例opia

    -//A25 QT教程/ ├──Qt 5开发教程 | ├──Qt初级教程 | | ├──第10课&基于Widget的GUI编程 – 其他控件 | | ├──第11课&基于Widget的 ...

  3. qt 分辨率问题 安卓_Windows下基于Qt开发Android应用

    作为一个嵌入式工程师,会一个上位机编程语言还是很有必要的,这里推荐各位有精力的学习一下Qt . 学习Qt的优势:学习的人多,资料相对丰富 拖拽控件即可完成界面设计,简单易用 最大的优势:跨平台 本次网 ...

  4. Ubuntu18.04下QT开发Android无法连接设备问题解决

    1. 需求 在Linux环境下搭建QT的Android开发环境,开发了一款APP想部署安装在实体手机设备上. Linux版本: ubuntu18.04 64位,运行在虚拟机环境下. QT版本: 5.1 ...

  5. cocos2d for python_Python版的cocos2d库:一个2D游戏开发GUI框架的入门详解

    1 说明: ===== 1.1 cocos2d是一个基于MIT协议的开源框架,用于构建游戏.应用程序和其他图形界面交互应用. 1.2 不逊色于pygame,但是其实 Python版的cocos2d库是 ...

  6. qt开发界面程序快速入门总结

    前言 要使用qt设计一款上位机,从保存的数据文件中显示时域.频域图. QT基本概念及其下载 我参考了C语言中文网.里边有比较全面的QT基本概念以及下载教程.对于版本的选择,用于公司开发的话,比较稳定的 ...

  7. Qt开发Android环境配置

    目录 0.前提 1.安装JDK 2.Android SDK下载 3. 安装模拟器 4.Qt中进行配置 5.新建android项目 6.结束 0.前提 安装Qt时勾选Android相关套件,确保Qt的安 ...

  8. Qt for Android创建AndroidManifest.xml和Java类文件

    前言 随着Qt的不断升级,如今用Qt来做跨平台开发也越来越方便,特别是Qt5.0版本以后加大了对Qt Quick的拓展,用QML来开发移动端的应用非常简单,并且支持的库也越来越多. 今天要讲的是Qt开 ...

  9. Qt基础与Qt on Android入门-安晓辉-专题视频课程

    Qt基础与Qt on Android入门-66107人已学习 课程介绍         本课程起始于基础的开发环境搭建和Qt Creator介绍,帮助初学者入门:着力于Qt的内在机制,由浅入深介绍信号 ...

最新文章

  1. 那些年我们踩到过的坑(二):3.1 版 MultiThreadedHttpConnectionManager 未releaseConnection导致应用服务器宕机...
  2. 实用技巧:使用 jQuery 异步加载 JavaScript 脚本
  3. 链路追踪之zipkin
  4. 【年终总结】2019年有三AI知识星球做了什么,明年又会做什么
  5. c++ 智能指针_详解 C++ 11 中的智能指针
  6. 《Go语言圣经》学习笔记 第六章 方法
  7. Django从理论到实战(part19)--DTL模板语法
  8. 普及几个小常识,新手技能补充
  9. elk 聚合日志_使用ELK堆栈进行日志聚合
  10. Linux(9)--添加新用户+赋sudo权限
  11. python中如何编写代码输入多个数据并把它们放在一个列表中去_10分钟学习函数式Python...
  12. 【NOI2022】PV「什么是信息学精神?」
  13. C++工作笔记-根据父类指针获取子类类型(或不同的对象)
  14. c语言洗牌发牌结构体,C语言程序设计课程设计多功能计算器、洗牌发牌、学生文件处理、链表处理.doc...
  15. 独立完成一个城市选择组件(阿里前端题目,内附知识点、思路)
  16. Apache Flume的介绍安装及简单案例
  17. MySQL数据库安装手册
  18. 2020年中国不支持苹果_苹果2020年9月事件提示
  19. java学习的电脑_请问学习java需要什么配置的笔记本电脑?
  20. 经验之谈:9大技巧快速提升自己的平面设计思维能力

热门文章

  1. 前端开发必看100道大厂面试题集锦(一)
  2. Xshell在Windows和Linux间文件的上传和下载
  3. oracle修改表字段名备注_Oracle修改表或者字段的注释
  4. GIS其实就在我们身边
  5. vue动态判断input readonly属性
  6. Hive整合HBase,操作HBase表
  7. 怎么自定义windows系统的性能监视器的属性
  8. select2如何设置默认空值
  9. 【金阳光测试】--深入Monkey工具和使用--Android系列(3)2014年八月八号
  10. Linux运维工程师面试知识点汇总(一)