微信小程序实现连接蓝牙设备跑步APP
背景
微信小程序兴起,有变成超级APP的趋势,通过微信提供的小程序api,可以通过微信调用到手机原生的支持。
目标
通过微信小程序实现来实现跑步类App的功能。
需求分析
跑步类App需要的两个核心的数据是:心率,GPS。(当然有些App没有链接心率设备,那就不要获取实时心率了)。
工具
到微信公众平台申请小程序账号,下载微信开发者工具(预览功能可以让手机扫一扫预览小程序)。
核心功能一:连接蓝牙设备
1.初始化蓝牙适配器 openBluetoothAdapter。
2.获取蓝牙适配器状态getBluetoothAdapterState,如果蓝牙可用则,则寻找附近设备;如果不可用,则提示蓝牙未开启并监听蓝牙状态onBluetoothAdapterStateChange。
3.开始寻找附近设备startBluetoothDevicesDiscovery,找到附近的蓝牙列表getBluetoothDevices,并同时监听onBluetoothDeviceFound,发现新设备则添加到蓝牙列表中。
4.在蓝牙列表选择蓝牙设备,获取对应的deviceId。
5.创建蓝牙连接createBLEConnection,以deviceId为参数,创建成功后调用stopBluetoothDevicesDiscovery方法,停止寻找蓝牙设备(寻找设备需要花费大量资源)。
6.获取蓝牙设备服务getBLEDeviceServices,拿到serviceId。
7.获取该设备所有特征值getBLEDeviceCharacteristics,拿到characterId,至此连接设备的三个参数都拿到了(deviceId,serviceId,characterId)。
8.开启notify通信notifyBLECharacteristicValueChange。
9.监听onBLECharacteristicValueChange传输的消息,到这一步蓝牙设备实时发送的消息就接收到了。
核心功能二:获取手机GPS
调用wx的api,getLocation即可调用当前的GPS信息、速度、海拔等,计算gps两点之间的距离就可以获取整段距离,调用小程序的map组件可以将整段的GPS绘制成跑步路线。
遇到的问题
微信小程序api的getLocation功能缺陷:
Ios设备在息屏和后台运行的情况下getLocation均无法正常调用,只有切换到前台运行时,才能正常使用(使用的是苹果7)。
Android设备部分设备在息屏和后台运行情况下getLocation无法正常调用(本人实测,华为mate10 后台+息屏情况下无法调用,但是honor7X在各种情况下均能正常调用)。
微信小程序实现连接蓝牙设备跑步APP的更多相关文章
- 微信小程序实质是什么? Hybrid App
微信小程序是一种不需要下载安装即可使用的应用,用户扫一扫或者搜一下即可打开应用.微信小程序实质是Hybrid技术的应用.Hybrid App(混合模式移动应用). 小程序能够更多的可以更多的调用手机本 ...
- 微信小程序swiper实现 句子控app首页滑动卡片
微信小程序swiper实现 句子控app首页滑动卡片 引言:最近看到句子控APP首页的效果很清新,可是发现他的微信小程序端没有实现这个功能,我看了一下难度不大,于是尝试着去实现. 实现效果如下: 1. ...
- 微信小程序-从零开始制作一个跑步微信小程序
来源:伯乐在线 - 王小树 链接:http://ios.jobbole.com/90603/ 点击 → 申请加入伯乐在线专栏作者 一.准备工作 1.注册一个小程序账号,得用一个没注册过公众号的邮箱注册 ...
- 微信小程序-蓝牙连接
最近的项目需要使用小程序的蓝牙功能与硬件设备进行连接相互传送数据指令,联调过程中发现一些问题,于是想着记录下来,方便以后查看! 1.0一般使用蓝牙功能肯定是想连接某一个蓝牙设备,所以需要知道这个蓝牙设 ...
- 微信小程序http连接访问解决方案
HTTP + 加密 + 认证 + 完整性保护 = HTTPS,小程序考虑到信息安全的问题,选用了更为稳定安全的https 来进行信息传递. HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全 ...
- 我的微信小程序第三篇(app.json)
前言 端午节回家了,所以好多天没有更新,只想说还是待在家里舒服呀,妈妈各种做好吃的,小侄子侄女各种粘着我在室外玩,导致我三天下来不仅胖了一圈,还黑了一圈,上班第一天有同事就说我晒黑了,哭~~~,为了防 ...
- 微信小程序的生命周期和APP对象的使用
1.生命周期和APP对象的使用: //app.js App({ onLaunch: function () { //调用API从本地缓存中获取数据 var logs = wx.getStorageSy ...
- 微信小程序自学第二课:app及页面的生命周期、使用setData绑定数据
一.App声明周期 1.App() app.js中的App() 函数用来注册一个小程序.接受一个 object 参数,其指定小程序的生命周期函数等. 示例代码: App({ onLaunch: fun ...
- 微信小程序蓝牙连接小票打印机
1.连接蓝牙 (第一次发表博客) 第一步打开蓝牙并搜索附近打印机设备// startSearch: function() { var that = this wx.openBluetoothAda ...
随机推荐
- 在VMware上安装centos
Windows,VMware和Centos三者的关系 VMware安装.centos安装 在 VMware 上安装 CentOS 第 1 步:打开 VMware,点击创建新的虚拟机 第 2 步:选择典 ...
- 在linux下进行数据备份
一.完全备份 完全备份是指把所有需要备份的数据全部备份.当然,完全备份可以备份整块硬盘.整个分区或某个具体的目录.完全备份的好处是数据恢复方便,因为所有的数据都在同一个备份中,所以只要恢复完全备份,所 ...
- 搜索(BFS、DFS、回溯)
这类题是最简单的了都是一个套路,不像动态规划一类题一个套路,没做过就是不会也极难想出来. 一.BFS 解决的问题:用来初始点解决到指定点的最短路径问题,因为图的每一层上的点到初始点的距离相同.(注意是 ...
- POJ 1177 矩形周长并 模板
Picture 题目链接 http://poj.org/problem?id=1177 Description A number of rectangular posters, photographs ...
- 【Python基础】13_Python中的PASS
pass关键字的使用 在程序分支中,如果不想立刻执行该分支,可使用pass占位符,pass不表示任何含义,仅保证程序不会报错. 如: action_str = input("请选择希望执行的 ...
- Django-djangorestframework-响应模块
响应模块 一般都用 Response 对象来做返回(最后一定是打包成符合 HTTP 协议的数据格式来传输,Response 类做了一系列处理,所以这里我们只需要关注下它的那些参数即可) 响应类构造器 ...
- k8s-prometheus 数据采集(node redis kubelet等)
apiVersion: v1 kind: ConfigMap metadata: name: prometheus-config namespace: kube-ops data: prometheu ...
- Springboot使用外置tomcat的同时使用websocket通信遇到的坑
随意门:https://blog.csdn.net/qq_43323720/article/details/99660430 另外,使用了nginx的话,需要注意开放websocket支持 serve ...
- 怎样获取Cookie
使用 document.cookie 获取; document.cookie
- windows下将jar包打入maven仓库
mvn install:install-file -DgroupId=org.csource -DartifactId=fastdfs-client-java -Dversion=1.27 -Dpac ...