- 蓝牙一些常见问题和小细节
*碎碎念 咱们说说蓝牙模块的一些常见的问题,大部分文档能找到的。有些文档有标注!但是发现有部分开发者没出坑,我会在下文提出!!! 1.部分机型蓝牙模块需要开启定位 蓝牙和定位有啥关系? 不知道,非要一个答案就是和系统有关! (再问就自闭了orz....) 2.蓝牙不支持直连 如果你不通过接口搜索到蓝牙,从而直接去连接的话,你会发现 wx.getBluetoothDevices 获取不到已经连接的设备。不过在你搜索过之后你就可以直接连接了!! 3.蓝牙连接失败 在调用蓝牙连接的时候,我们通常碰到蓝牙给我们返回 10003 / 10012 错误,通常是系统吐出来的(通常而不是所有的)。我们需要重新去连接,所以我们把蓝牙连接放进一个循环里面!!如: async createBLEConnection(deviceID) { [代码] // 进行连接蓝牙 let count = 8 let ress = null while (count > 0) { count -= 1 let err, res [err, res] = await to(wepy.createBLEConnection({ discoverServiceType: 1, deviceId: deviceID, timeout: 3 * 1000 })) ress = res if ((res && res.errCode === 0) || (err && err.errCode === -1)) { this.connet = 0 return true } await this.closeBLEConnection() if (!this.ble.opened) { tip.alert('蓝牙未开启!') this.connet = 0 return } // 间隔2秒后 再次获取 await Time.sleep(2) tip.loading('蓝牙连接中...') this.connet = 0 } if (ress && ress.errMsg.indexOf('createBLEConnection:ok') >= 0) { this.connet = 0 return true } tip.loaded() return false } [代码] 以上是我用wepy框架写的!不建议直接复制 4.搜索成功后记得关闭蓝牙搜索 在通过startBluetoothDevicesDiscovery搜索成功之后记得调用 wx.stopBluetoothDevicesDiscovery 关闭搜索,如果不关闭手机性能差的会无比卡!对。。。 5. Android 上获取到的deviceId为设备 MAC 地址,iOS 是设备 uuid 哈哈!所以你需要搜索到设备的name或者localname去连接 ,localname有的手机是没有的! *补充一些 想了想!干脆把文档里面一些已经提出还会有人提的问题也 碎叨一下 1.蓝牙需要成对调用 以下接口需要成对调用 createBLEConnection 和 closeBLEConnection startBluetoothDevicesDiscovery 与 stopBluetoothDevicesDiscovery 在关闭蓝牙的时候 closeBLEConnection 和 stopBluetoothDevicesDiscovery 2.小程序只支持低功耗蓝牙 哈哈低功耗蓝牙是啥??百度吧!! *最后 以上就是蓝牙常见的一些问题,多看文档是可以解决很多小坑,深坑的话就来社区发帖吧!咱们下篇文章见
2019-01-11 - 自定义导航栏所有机型的适配方案
写在前面的话 大家看到这个文章时一定会感觉这是在炒剩饭,社区中已经有那么多分享自定义导航适配的文章了,为什么我还要再写一个呢? 主要原因就是,社区中大部分的适配方案中给出的大小是不精确的,并不能完美适配各种场景。 社区中大部分文章给到的值是 iOS -> 44px , Android -> 48px 思路 正常来讲,iOS和Android下的胶囊按钮的位置以及大小都是相同且不变的,我们可以通过胶囊按钮的位置和大小再配合 wx.getSystemInfo 或者 wx.getSystemInfoSync 中得到的 [代码]statusBarHeight[代码] 来计算出导航栏的位置和大小。 小程序提供了一个获取菜单按钮(右上角胶囊按钮)的布局位置信息的API,可以通过这个API获取到胶囊按钮的位置信息,但是经过实际测试,这个接口目前存在BUG,得到的值经常是错误的(通过特殊手段可以偶尔拿到正确的值),这个接口目前是无法使用的,等待官方修复吧。 下面是我经过实际测试得到的准确数据: 真机和开发者工具模拟器上的胶囊按钮不一样 [代码]# iOS top 4px right 7px width 87px height 32px # Android top 8px right 10px width 95px height 32px # 开发者工具模拟器(iOS) top 6px right 10px width 87px height 32px # 开发者工具模拟器(Android) top 8px right 10px width 87px height 32px [代码] [代码]top[代码] 的值是从 [代码]statusBarHeight[代码] 作为原点开始计算的。 使用上面数据中胶囊按钮的高度加 [代码]top[代码] * 2 上再加上 [代码]statusBarHeight[代码] 的高度就可以得到整个导航栏的高度了。 为什么 [代码]top[代码] * 2 ?因为胶囊按钮是垂直居中在 title 那一栏中的,上下都要有边距。 扩展 通过胶囊按钮的 [代码]right[代码] 可以准确的算出自定义导航的 [代码]左边距[代码]。 通过胶囊按钮的 [代码]right[代码] + [代码]width[代码] 可以准确的算出自定义导航的 [代码]右边距[代码] 。 通过 wx.getSystemInfo 或者 wx.getSystemInfoSync 中得到的 [代码]windowWidth[代码] - 胶囊按钮的 [代码]right[代码] + [代码]width[代码] 可以准确的算出自定义导航的 [代码]width[代码] 。 再扩展 wx.getSystemInfo 或者 wx.getSystemInfoSync 中得到的 [代码]statusBarHeight[代码] 每个机型都不一样,刘海屏得到的数据也是准确的。 如果是自定义整个页面,iPhone X系列的刘海屏,底部要留 [代码]68px[代码] ,不要问我为什么! 代码片段 https://developers.weixin.qq.com/s/Q79g6kmo7w5J
2019-02-25 - 2019-03-07
- 2019-02-19