使用 Qt for Android 获取并利用手机传感器数据(上篇)开发环境省心搭建
现代手机拥有许多传感器,包括地磁、姿态、GPS、光照、温度、气压、摄像、声音、电磁等,完全就是一个高度集成的科学仪器。不夸张的说,一部手机加上一个外围的计算机和控制系统,做一个功能较强的自主移动机器人并不是不可能。但是,很多APP都只是局限于自身的功能,并不喜欢把传感器数据泵出来给其他设备分享。即使有,也是收费的。
有没有可能自己做一个小APP,获得所有的手机传感器数据,榨干手机的感知能力呢?实际上实现起来并不困难,甚至连界面都不需要。笔者准备涉足一下从未实操过的App开发,把旧手机的传感器数据分享出来。
1. 基本思路
分享传感器数据,必然需要一个连接。从应用的场景来说,用手机与消费者的网络距离来分类,可以想到如下几种常见共享思路。
序号 | 连接 | 场景 | 技术要求 |
---|---|---|---|
0 | Wifi局域网 | 室内/近距离,低延迟局域网通信 | 需要局域网服务声明与功能发布实现自动发现与连接 |
1 | 网络热点(无线/USB/蓝牙等) | 室内/近距离,无需第三方Wifi网络支持,低延迟局域网通信 | 客户端直接获取网关地址而后连接,最简单。 |
2 | 蓝牙数据连接 | 室内/近距离,无需第三方Wifi | 需要蓝牙发现与连接功能 |
3 | 物联云服务 | 远距离,基站覆盖区域内共享,公网端口映射 | 需要注册域名,购买云资源,花钱但简单可靠 |
4 | DDNS动态域名 | 远距离,基站覆盖区域内共享,公网端口映射 | 需要自己维护宽带、IP与DDNS,复杂度高但开销小 |
从简单考虑,我们使用序号1进行开发。手机为其他设备提供互联网热点,并在构造的局域网内直接通过局域网IP段进行传感器内容分发。
2. 开发工具链搭建
如果熟悉Java或者Kotlin开发,当然是用原生的 Android Studio 搞定。不过我比较熟悉C++,准备使用C++ Qt搞定。通过初步的安装,我惊喜的发现新版的Qt(Creator版本 9.0)在线安装真的比4年前方便太多了!基本是按照下面的步骤自动搞定,不需要自己修改环境变量、配置Java。
注意的是,为了后续安装方便,机器上要安装Git客户端,并加入PATH,使得CMD可以找到Git.
2.1 下载并安装 Android Studio
在官网下载 Android Studio, 并进行安装。笔者的下载速度不孬,呼呼叫就下完了,管的狠!
- 下载后,最好选择一个大一点的磁盘,进行安装。我不喜欢把SDK之类的东西放到默认的C:\Users\Name\AppData下,所以注意,安装的时候选好文件夹。
- 如果一直在手机上物理调试,也可以不安装虚拟机。这样快得多。另外在实际手机调试的体验要比虚拟机好得多。
在安装完毕后,直接开始(start),首次会提示下载必要的组件。注意为了SDK不污染AppData,选择自定义模式
完成后,关闭程序。注意,目前缺失的很多组件,Qt Creator 9.0会在配置时进行下载。
2.2 在线安装Qt
在官网下载Qt在线安装工具
https://www.qt.io/download-qt-installer
需要注意的是,要有耐心等待网页,真的很慢。而后会进入下载页面。真开始下载后,下载超级快。另外注意的是,虽然是在线安装,但是绿色版的。比如你在学校机房,安装好一台后,直接拷贝到其他机器就全了。只要保证文件夹都一样就可以。如果不一样,用junction创建一个NTFS链接即可。
由于学校不是所有计算机都有D:(有的是光驱+E:),我一般会选择一台C盘大的机器,全部一股脑装到C:\Qt或者 C:\Tools\Qt里(本次放在C:\Android\Qt)。发布到其他电脑的 E:或者D:后,再junction到C。
而后,双击下载的文件 “qt-unified-windows-x64-4.5.0-online.exe” 进行安装。注意似乎需要填写账号,还需要提前注册一个。
在选择套件时,直接选择上 Android,就选中了所有的组件。默认当前最新是Qt 6.4.1。像笔者这样已经安装过Qt的用户,直接选升级后,再添加Android组件即可。注意一定要安装9.0以上的QtCreator,真的非常好用。
2.3 自动配置Android工具链
首次启动QtCreator后,底部会有提示,配置安卓
直接点击,选择刚才的SDK路径后,会发现很多项都是红色的。
点击“设置SDK”,进行配置
而后,再次选择同一个SDK文件夹,就会触发下一步配置
注意许可证要一路点击同意
完毕后,主干功能全部变绿。如果配置了Git,则卡伊自动克隆openssl,所有功能变绿。
此时,重启 QtCreator,会发现Kits里已经出现了完好的工具链。
3. 创建第一个安卓应用
可以直接新建第一个应用了,也可以打开一个例子。注意,在release版本的构建选项里,要创建一个用于app签名的证书,否则release版本的apk生成会有问题。
注意首次编译会下载 Downloading https://services.gradle.org/distributions/gradle-7.4.2-bin.zip,如果网络不好,可能会超时。多试几次就可以了。要注意有些编译提示是UTF-8的,需要修改QtCreator的默认编码,这样才能显示中文错误提示。
编译后,即可运行例子
4 为后续开发安装额外的模块
Qt的很多专门模块目前已经变成可选模块,直接通过维护器进行自定义安装(我全装了)
我们把“Additional Libraries” 全勾上,花不了几个G的磁盘。
至此,基本的开发环境就做好了。
5 兼容性
要注意的是,目前太老的Android手机可能不支持,建议用近两年的手机测试。另外要查看自己手机的SDK版本,如果遇到问题,要先在Android Stuido里安装老一点的SDK。
使用 Qt for Android 获取并利用手机传感器数据(上篇)开发环境省心搭建相关推荐
- 使用 Qt for Android 获取并利用手机传感器数据(下篇)使用C++实现功能
在上一篇,我们搭建了开发环境.本篇,使用C++代码真正实现功能.我们使用UDP协议从手机上指定发送的目的地.端口.效果如下图,完整工程参考https://gitcode.net/coloreagles ...
- Qt for Android获取手机序列号/手机型号/手机制造商
前言 Qt for Android 获取手机型号/手机制造商/手机序列号,这些是要通过 Android 原生接口才能获取到的, 那么在 Qt 项目中通过 jni 接口调用 Android 原生接口来获 ...
- QT for android 获取PDA扫码的广播数据
QT for android 获取PDA扫码的广播数据 前记 笔者接触到的PDA扫码枪,有三种, 一种是蓝牙枪,连接到手机或者电脑上之后,可以直接把扫描到的数据传送到焦点所在的文本框中:另外两种是普通 ...
- java中的adt安装配置,Android SDK 2.3与Eclipse最新版开发环境搭建
一.背景和准备 1.Android 简介 Android是谷歌于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统.中间件.用户界面和应用软件组成,号称是首个为移动 ...
- ubuntu 11.04下Android开发环境的搭建!
ubuntu 11.04下Android开发环境的搭建! 1.安装JDK 首先到oracle的官网上下载linux版本的JDK,网址为:http://www.oracle.com/technetwor ...
- android笔记1——开发环境的搭建
Long Long ago...已经成为了历史,我还是要说出一个真相:早年前,那时候,android还不被大众所认知的时候,当然开发人员也没不像如今那样趋于饱和状态.一位大牛前辈,也是我的学长,那时候 ...
- Apache Spark学习:利用Eclipse构建Spark集成开发环境
介绍了如何使用Maven编译生成可直接运行在Hadoop 2.2.0上的Spark jar包,而本文则在此基础上, 介绍如何利用Eclipse构建Spark集成开发环境 . 不建议大家使用eclips ...
- android studio scala插件,Scala 语言开发Andorid ,开发环境的搭建(一)
Scala 语言开发Andorid ,开发环境的搭建 厌倦 Java 繁琐的语法,为了更优雅的开发 Android 程序,Scala 代替 Java 是一个不错的尝试. 开发前可以学习 Scala 的 ...
- Linux环境下Android开发环境的搭建
本文主要介绍在Ubuntu下Android开发环境的搭建,所使用的IDE为Eclipse(Android Studio同理,且可省去配置SDK以及安装adt插件的步骤). 1.安装JDK (1)JDK ...
最新文章
- 【嵌入式】从STM32F103ZET6移植到STM32F103RCT6的流程
- 随机组卷python_关于随机自动组卷的算法,二维数组
- 西安后宰门小学_陈洪杰:“数学魔术”课程校本化的价值与意义 || 为西安后宰门小学点个赞...
- token 过期刷新令牌_OkHttp实现全局过期token自动刷新
- Codeforces Round #671 (Div. 2)
- linux c语言fifo例程,FIFO在C语言中的应用
- HTML5(FileRdeader)
- 计算机设置页眉教案,设置页眉页脚——教学设计-20210318083746.docx-原创力文档
- java对象交换_如何在Java中交换或交换对象?
- 达梦数据库常用sql
- 27-什么是自旋锁?自旋的好处和后果是什么呢?
- Java(老白再次入门) - 异常处理
- 前端自动生成目录结构
- mysql match_mysql全文检索 match() against
- 查找MySQL文件的所在的真实地址(一行sql语句就欧克~)
- HTTP请求中POST与GET的区别
- 【原】ios打包ipa的四种实用方法(.app转.ipa)
- python个人自动化_GAD名人堂丨方李志专访 :于Python的UI自动化测试探索者
- ionic3本地通知加震动和原生音频
- 《码出高效:java开发手册》八 -单元测试