背景

微信小程序兴起,有变成超级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的更多相关文章

  1. 微信小程序实质是什么? Hybrid App

    微信小程序是一种不需要下载安装即可使用的应用,用户扫一扫或者搜一下即可打开应用.微信小程序实质是Hybrid技术的应用.Hybrid App(混合模式移动应用). 小程序能够更多的可以更多的调用手机本 ...

  2. 微信小程序swiper实现 句子控app首页滑动卡片

    微信小程序swiper实现 句子控app首页滑动卡片 引言:最近看到句子控APP首页的效果很清新,可是发现他的微信小程序端没有实现这个功能,我看了一下难度不大,于是尝试着去实现. 实现效果如下: 1. ...

  3. 微信小程序-从零开始制作一个跑步微信小程序

    来源:伯乐在线 - 王小树 链接:http://ios.jobbole.com/90603/ 点击 → 申请加入伯乐在线专栏作者 一.准备工作 1.注册一个小程序账号,得用一个没注册过公众号的邮箱注册 ...

  4. 微信小程序-蓝牙连接

    最近的项目需要使用小程序的蓝牙功能与硬件设备进行连接相互传送数据指令,联调过程中发现一些问题,于是想着记录下来,方便以后查看! 1.0一般使用蓝牙功能肯定是想连接某一个蓝牙设备,所以需要知道这个蓝牙设 ...

  5. 微信小程序http连接访问解决方案

    HTTP + 加密 + 认证 + 完整性保护 = HTTPS,小程序考虑到信息安全的问题,选用了更为稳定安全的https 来进行信息传递. HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全 ...

  6. 我的微信小程序第三篇(app.json)

    前言 端午节回家了,所以好多天没有更新,只想说还是待在家里舒服呀,妈妈各种做好吃的,小侄子侄女各种粘着我在室外玩,导致我三天下来不仅胖了一圈,还黑了一圈,上班第一天有同事就说我晒黑了,哭~~~,为了防 ...

  7. 微信小程序的生命周期和APP对象的使用

    1.生命周期和APP对象的使用: //app.js App({ onLaunch: function () { //调用API从本地缓存中获取数据 var logs = wx.getStorageSy ...

  8. 微信小程序自学第二课:app及页面的生命周期、使用setData绑定数据

    一.App声明周期 1.App() app.js中的App() 函数用来注册一个小程序.接受一个 object 参数,其指定小程序的生命周期函数等. 示例代码: App({ onLaunch: fun ...

  9. 微信小程序蓝牙连接小票打印机

    1.连接蓝牙 (第一次发表博客)   第一步打开蓝牙并搜索附近打印机设备// startSearch: function() { var that = this wx.openBluetoothAda ...

随机推荐

  1. 关于SQLSERVER登录不了的情况

    是这样的,本人为了复制一个数据库文件把默认数据库设置成了脱机状态.在此点击联机的时候SSMS显示重启,重启后在用windows登录显示无法打开默认数据库.用其他不适该默认数据库的账号可以登录.想问一下 ...

  2. cook,session

    //发送session request.getSession().setAttribute("user", "zs1"); //发送cookie //需要自动登 ...

  3. 对称加密、非对称加密、数字签名、数字证书、SSL是什么

    非对称密钥加解密 对于一份数据,通过一种算法,基于传入的密钥(一串由数字或字符组成的字符串,也称key),将明文数据转换成了不可阅读的密文,这就是“加密”,同样的,密文到达目的地后,需要再以相应的算法 ...

  4. python — 表的操作(一)

    1. 创建表 创建表: create table t1 (id int,name char(4)); create table t2 (id int,name char(4)) engine=myis ...

  5. MySQL优化 - 性能分析与查询优化(转)

    出处:  MySQL优化 - 性能分析与查询优化 优化应贯穿整个产品开发周期中,比如编写复杂SQL时查看执行计划,安装MySQL服务器时尽量合理配置(见过太多完全使用默认配置安装的情况),根据应用负载 ...

  6. Django ORM相关的一些操作

    一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 ...

  7. docker 入门2 - 容器 【翻译】

    入门,第 2 部分:容器 先决条件 安装的 Docker 版本是 1.13 及以上. 读完 第一部分 用下面的命令快速测试你的环境是否完备: docker run hello-world 概述 现在开 ...

  8. Scala学习二十——Actor

    一.本章要点 每个actor都要扩展Actor类并提供act方法 要往actor发送消息,可以用actor!message 消息发送是异步的:”发完就忘“ 要接受消息,actor可以调用receive ...

  9. JAVA学习篇--静态代理VS动态代理

    本篇博客的由来,之前我们学习大话设计,就了解了代理模式,但为什么还要说呢? 原因: 1,通过DRP这个项目,了解到了动态代理,认识到我们之前一直使用的都是静态代理,那么动态代理又有什么好处呢?它们二者 ...

  10. TCP协议探究(四):定时器

    1 概述 重传定时器:使用于当希望收到另一端的确认. 坚持(persist)定时器:使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口 保活(keepalive)定时器:用于检测一个空闲连接的另一 ...