女生的下面长什么样| 桂花乌龙茶属于什么茶| 曹真和曹操什么关系| 六月初二是什么星座| 什么虎什么山| 信阳毛尖是什么茶| 准生证有什么用| 焦作有什么大学| 晚上睡觉手发麻是什么原因| 6月7号什么星座| 中暑了喝什么| haccp是什么认证| 吃什么除湿| 橙字五行属什么| 什么啊| 腰疼贴什么膏药| 过敏性咳嗽吃什么药| 韩红和张一山什么关系| 肺热咳嗽吃什么药| 糖类抗原CA125高是什么意思| 酸菜鱼是什么地方的菜| 咳嗽绿痰是什么原因| 睡觉口干是什么原因| 珍珠母是什么东西| 军长是什么军衔| renewal什么意思| bur什么意思| 2001年属什么生肖| 冷鲜肉和新鲜肉有什么区别| 胃不好适合吃什么水果| 话赶话是什么意思| 一米阳光是什么意思| 香港有什么好玩的| 美国为什么那么强大| 胃癌低分化是什么意思| 蛇盘疮什么原因引起的| 梦见捡到钱是什么预兆| hp感染是什么病| 皮肤出现红点是什么原因| 间接胆红素高是什么原因| 头眩晕是什么原因引起的| 为什么会得阴虱| 春节吃什么| 一五行属性是什么| vad是什么意思| 脑供血不足用什么药效果最好| 天机不可泄露是什么意思| 什么时候可以领退休金| 多愁善感什么意思| 揠苗助长是什么意思| 越南三宝是什么| 小月子吃什么水果| uv是什么| 经常放屁是什么原因造成的| 下身有点刺痛什么原因| 移居改姓始为良是什么意思| 脸麻是什么原因引起的| 什么的小鸡| 嗔恨心是什么意思| 暴龙眼镜什么档次| 高血压吃什么降的快| 穿山甲用什么中药代替| oo什么意思| 腮腺炎是什么症状| 1026什么星座| 生姜黄叶病用什么药| 犹太人什么意思| 英语一和英语二有什么区别| 尿胆红素高是什么原因| 妇科检查清洁度二度是什么意思| 眼角发痒是什么原因| 抗hbs阳性是什么意思| 急性荨麻疹用什么药| 那英姓什么| 真菌感染用什么药最好| 什么止疼药见效最快| 什么是幼小衔接| 攒肚是什么意思| 见红是什么意思| 孟姜女属什么生肖| 受凉肚子疼吃什么药| 火气旺盛有什么症状| 长公主是皇上的什么人| 怠工是什么意思| bv是什么品牌| 置之不理的置是什么意思| 左心室高电压什么意思| 什么叫姑息治疗| 荷兰豆为什么叫荷兰豆| 产后大出血一般发生在什么时候| 拿乔是什么意思| 日本投降是什么时候| 肺部感染挂什么科| 睚眦欲裂什么意思| 核载是什么意思| 为什么大拇指只有两节| 木薯淀粉可以用什么代替| 导盲犬一般是什么品种| 吃菠萝蜜有什么好处| 高良姜是什么姜| 四季如春是什么生肖| 什么行业最赚钱投资小| 6d是什么意思| 意大利面是用什么做的| 老是打哈欠是什么原因| 信手拈来是什么意思| 生肖羊和什么生肖相冲| 嗓子有异物感堵得慌吃什么药| 睾丸肿大是什么原因| 骨刺吃什么药| 女人梦见鱼是什么意思| 为什么一直口渴| 晕车吃什么药| 内向的人适合什么职业| 啫喱是什么| 血糖和尿糖有什么区别| 白癜风吃什么药| 经常流鼻血是什么病的前兆| 胃下垂吃什么药最好| 劫色是什么意思| 脚冷是什么原因| ab型血可以输什么血| 铁石心肠是什么意思| 契机是什么意思| 房速是什么意思| 姓姜的男孩起什么名字好| 眉毛长白毛是什么征兆| 高笋和茭白有什么区别| 二阴指的是什么| 坐地能吸土是什么意思| 粤语什么怎么说| 水淀粉是什么粉| 人流挂什么科| 什么时候建档| 好麻吉是什么意思| 刑事拘留意味着什么| 为什么人一瘦就会漂亮| 炎帝叫什么| 什么叫盗汗| 五指毛桃煲汤配什么| 什么时候开始数伏| 拔罐对身体有什么好处| 四月二十九是什么星座| 化疗和靶向有什么区别| 喝苦荞茶有什么好处和坏处| 运动后体重增加是什么原因| 胃炎可以吃什么| 儿童扁桃体发炎吃什么药| 四大皆空是什么意思| 椰浆和椰汁有什么区别| 顾字五行属什么| 炖牛肉放什么调料| 深渊是什么意思| 介质是什么| 肝的反射区在什么部位| 新生儿痤疮用什么药膏| 贫血吃什么药效果好| 病毒性肠炎吃什么药| 早上八点半是什么时辰| 水落石出是什么意思| 522是什么意思| 痞满是什么意思| 94岁属什么| 十二月十八号是什么星座| 文玩是什么| 拜阿司匹林什么时间吃最好| 尔字五行属什么| 婴儿掉头发是什么原因| 顶臂长是什么意思| 秋天有什么水果| 副部长是什么级别| 女人什么发型最有气质| 大便排不出来是什么原因| 乳腺结节吃什么散结快| 砚字五行属什么| 阴道黑是什么原因| 总是抽筋是什么原因| 喉咙发痒咳嗽吃什么药| 左边小腹痛什么原因女| 浅粉色配什么颜色好看| 11月9日什么星座| 宽粉是什么做的| 血清是什么| 氮肥是什么肥料| 影字五行属什么| 晚上睡觉咬牙齿是什么原因| 红豆为什么代表相思| 尿路感染吃什么药消炎| 包皮过长挂什么科| 这是什么虫子| 鼻涕是绿色的是什么原因| 医学ac是什么意思| 肠炎吃什么药最好| 鲶鱼吃什么食物| 腋下疼痛挂什么科| 分诊是什么意思| dm是什么单位| 晕轮效应是什么意思| 否命题和命题的否定有什么区别| 为什么不来大姨妈也没有怀孕| 哈字五行属什么| 手肿是什么原因| 起水痘不能吃什么食物| 例假血是黑色的是什么原因| 孩子咬手指甲是什么原因| 白虎是什么意思| 儿童口腔溃疡用什么药| pfs是什么意思| 结婚36年是什么婚| 动态心电图能检查出什么病| 羽毛球拍磅数是什么意思| 乌鸡蛋什么颜色| 萎缩性胃炎能吃什么水果| 查hpv挂什么科| 惊喜的英文是什么| 勇敢的什么| 梦见很多虫子是什么意思| 不想吃油腻的东西是什么原因| 吃什么补肾精| 纯爱是什么意思| 放养是什么意思| 酒后喝什么饮料比较好| 咳血是什么原因| 鸡子是什么| 女朋友生日送什么花| 10月是什么季节| 心脏回流是什么意思| 眼肿是什么原因| 老师为什么叫老师| 一躺下就咳嗽是什么原因| 菽是什么意思| 女性头部出汗吃什么药| 腰疼贴什么膏药| 一什么牛奶| 什么生金| 下午七点是什么时辰| 拉出黑色的屎是什么原因| 颈椎病有些什么症状| 下眼袋发青是什么原因| 不完全性右束支传导阻滞是什么意思| 院长是什么级别| 防代表什么生肖| 什么一什么什么成语| 车前草的作用是什么| 结节性甲状腺肿是什么意思| 卡不当什么意思| 肉便器是什么东西| nt检查前需要注意什么| 整个后背疼是什么原因| 脑内多发缺血灶是什么意思| 航班号是什么| 文才是什么意思| 耳毛念什么| 香油吃多了有什么害处| 多多益善是什么意思| 欺凌是什么意思| 拉肚子去医院挂什么科| 九肚鱼是什么鱼| 心火是什么原因引起的| 什么是丙肝| 勾绞煞是什么意思| 清火喝什么茶| 失去自我是什么意思| 假唱是什么意思| 百度

电影审查逐渐放宽 2016我国电影票房已居世界第二

百度 第五类,没有达到标准期限的保障房这类保障房包括经济适用房,回迁房,两限房等,有些城市都要求满足一定条件才可以进行交易,一般来说都是购买三五年以后,并且这类房产达到标准期限,出售的时候也要执行政府的指导价,并且需要缴纳更多的税费,如果投资房产建议不要购买这类房产。

主机模式:基础库 1.1.0(微信客户端 iOS 6.5.6,Android 6.5.7)开始支持。

从机模式:基础库 2.10.3 开始支持。

蓝牙低功耗是从蓝牙 4.0 起支持的协议,与经典蓝牙相比,功耗极低、传输速度更快,但传输数据量较小。常用在对续航要求较高且只需小数据量传输的各种智能电子产品中,比如智能穿戴设备、智能家电、传感器等,应用场景广泛。

# 1. 角色/工作模式

蓝牙低功耗协议给设备定义了若干角色,或称工作模式。小程序蓝牙目前支持的有以下几种:

# 1) 中心设备/主机 (Central)

中心设备可以扫描外围设备,并在发现有外围设备存在后与之建立连接,之后就可以使用外围设备提供的服务(Service)。

一般而言,手机会担任中心设备的角色,利用外围设备提供的数据进行处理或展示等等。小程序提供低功耗蓝牙接口是默认设定手机为中心设备的。

# 2) 外围设备/从机 (Peripheral)

外围设备一直处于广播状态,等待被中心设备搜索和连接,不能主动发起搜索。例如智能手环、传感器等设备。

如果外围设备广播时被设置为不可连接的状态,也被称为广播模式 (Broadcaster),常见的例子是蓝牙信标 (Beacon) 设备。

# 注意

在小程序中,蓝牙设备可以同时处于主机和从机模式。在安卓设备上,只需要调用 wx.openBluetoothAdapter 初始化一次蓝牙适配器;而在 iOS 设备上,需要分别使用两种不同的 mode 参数分别初始化中心设备和外围设备的蓝牙适配器。建议统一对于主机和从机模式分别进行一次初始化。wx.closeBluetoothAdapter 会同时关闭两种模式的蓝牙适配器。

# 2. 通信协议

在两个蓝牙低功耗设备建立连接之后,双方的数据交互是基于 GATT (Generic Attribute Profile) 规范,根据该规范可以定义出一个个配置文件 (Profile),描述该蓝牙设备提供的服务 (Service)。

在整个通信过程中,有几个最主要的概念:

  • 配置文件 (Profile): Profile 是被蓝牙标准预先定义的一些 Service 的集合,并不真实存在于蓝牙设备中。如果蓝牙设备之间要相互兼容,它们只要支持相同的 Profile 即可。一个蓝牙设备可以支持多个 Profile。
  • 服务 (Service): Service 是蓝牙设备对外提供的服务,一个设备可以提供多个服务,比如电量信息服务、系统信息服务等。每个服务由一个 UUID 唯一标识。
  • 特征 (Characteristic): 每个 Service 包含 0 至多个 Characteristic。比如,电量信息服务就会有个 Characteristic 表示电量数据。Characteristic 包含一个值 (value)和 0 至多个描述符 (Descriptor) 组成。在与蓝牙设备通信时,主要就是通过读写 Characteristic 的 value 完成。 每个 Characteristic 由一个 UUID 唯一标识。
  • 描述符 (Descriptor): Descriptor 是描述特征值的已定义属性。例如,Descriptor 可指定人类可读的描述、特征值的取值范围或特定于特征值的度量单位。每个 Descriptor 由一个 UUID 唯一标识。

如下图所示,我们可以简单地理解为:每个蓝牙设备可能提供多个 Service,每个 Service 可能有多个 Characteristic,我们根据蓝牙设备的协议对对应 Characteristic 的值进行读写即可达到与其通信的目的。

GATT

# 3. UUID (Universally Unique Identifier)

根据蓝牙 4.2 协议规范(Vol 3, Part B, section 2.5.1 UUID),UUID 是一个 128 位的唯一标识符,用来标识 Service 和 Characteristic 等。

为了减少存储和传输 128 位 UUID 值的负担,蓝牙技术联盟预分配了一批 UUID,这一批 UUID 拥有一个共同部分,被称为 Bluetooth Base UUID,即 00000000-0000-1000-8000-00805F9B34FB。因此,预分配的 UUID 也可以使用 16 位或 32 位表示,其中 16 位 UUID 最为常用。使用 16/32 位的 UUID 可以降低存储和传输的负载。开发者自定义的 UUID 应注意不能与预分配的 UUID 冲突。

在小程序中,wx.startBluetoothDevicesDiscoverywx.getConnectedBluetoothDevices 的参数支持 16/32/128 位 UUID。在其他接口的参数中,

  • iOS 支持直接使用 16 位 和 128 位的 UUID;
  • Android 8.0.9 版本开始,支持直接使用 16/32/128 位 UUID;
  • Android 8.0.9 以下版本,只支持 128 位的 UUID,需要开发者手动补位到 128 位。补位方式如下
    128位UUID = 16位UUID * 2^96 + Bluetooth Base UUID
    128位UUID = 32位UUID * 2^96 + Bluetooth Base UUID
    
    例如
    0x180F -> 0000180F-0000-1000-8000-00805F9B34FB
    

所有接口的返回值统一为 128 位 UUID。

# 4. 中心设备的使用流程

# 4.1 初始化蓝牙模块

在使用蓝牙接口前,必须首先调用 wx.openBluetoothAdapter 初始化蓝牙适配器模块,其他接口必须在初始化后成功方可调用。

当蓝牙开关未开启或手机不支持蓝牙时,会返回错误 (errCode=10001)。此时小程序蓝牙模块已经初始化完成,可通过 wx.onBluetoothAdapterStateChange 监听手机蓝牙状态的改变,也可以调用蓝牙模块的所有API。开发者在开发中应该考虑兼容用户在使用小程序过程中打开/关闭蓝牙开关的情况,并给出必要的提示,提高可用性。

# 4.2 扫描并发现蓝牙外围设备

蓝牙模块初始化成功后,一般需要通过 wx.startBluetoothDevicesDiscovery 扫描外围设备。当蓝牙外围设备被扫描到时,会回调 wx.onBluetoothDeviceFound 事件,返回扫描到的设备。扫描设备比较耗费系统资源,请在搜索到需要的设备后及时调用 wx.stopBluetoothDevicesDiscovery 停止搜索。

若之前已连接过某个设备,获取到了 deviceId,可跳过扫描步骤。

// 监听扫描到新设备事件
wx.onBluetoothDeviceFound((res) => {
  res.devices.forEach((device) => {
    // 这里可以做一些过滤
    console.log('Device Found', device)
  })
  // 找到要搜索的设备后,及时停止扫描
  wx.stopBluetoothDevicesDiscovery()
})

// 初始化蓝牙模块
wx.openBluetoothAdapter({
  mode: 'central',
  success: (res) => {
    // 开始搜索附近的蓝牙外围设备
    wx.startBluetoothDevicesDiscovery({
      allowDuplicatesKey: false,
    })
  },
  fail: (res) => {
    if (res.errCode !== 10001) return
    wx.onBluetoothAdapterStateChange((res) => {
      if (!res.available) return
      // 开始搜寻附近的蓝牙外围设备
      wx.startBluetoothDevicesDiscovery({
        allowDuplicatesKey: false,
      })
    })
  }
})

# 4.3 连接设备

蓝牙低功耗设备间要进行通信,必须首先建立连接。

wx.createBLEConnection({
  deviceId, // 搜索到设备的 deviceId
  success: () => {
    // 连接成功,获取服务
    wx.getBLEDeviceServices({
      deviceId,
    })
  }
})

# 4.4 获取蓝牙外围设备的服务

wx.getBLEDeviceServices({
  deviceId, // 搜索到设备的 deviceId
  success: (res) => {
    for (let i = 0; i < res.services.length; i++) {
      if (res.services[i].isPrimary) {
        // 可根据具体业务需要,选择一个主服务进行通信
      }
    }
  }
})

# 4.5 读写服务的特征值

wx.getBLEDeviceCharacteristics({
  deviceId, // 搜索到设备的 deviceId
  serviceId, // 上一步中找到的某个服务
  success: (res) => {
    for (let i = 0; i < res.characteristics.length; i++) {
      let item = res.characteristics[i]
      if (item.properties.write) { // 该特征值可写
        // 本示例是向蓝牙设备发送一个 0x00 的 16 进制数据
        // 实际使用时,应根据具体设备协议发送数据
        let buffer = new ArrayBuffer(1)
        let dataView = new DataView(buffer)
        dataView.setUint8(0, 0)
        wx.writeBLECharacteristicValue({
          deviceId,
          serviceId,
          characteristicId: item.uuid,
          value: buffer,
        })
      }
      if (item.properties.read) { // 该特征值可读
        wx.readBLECharacteristicValue({
          deviceId,
          serviceId,
          characteristicId: item.uuid,
        })
      }
      if (item.properties.notify || item.properties.indicate) {
        // 必须先启用 wx.notifyBLECharacteristicValueChange 才能监听到设备 onBLECharacteristicValueChange 事件
        wx.notifyBLECharacteristicValueChange({
          deviceId,
          serviceId,
          characteristicId: item.uuid,
          state: true,
        })
      }
    }
  }
})
// 操作之前先监听,保证第一时间获取数据
wx.onBLECharacteristicValueChange((result) => {
  // 使用完成后在合适的时机断开连接和关闭蓝牙适配器
  wx.closeBLEConnection({
    deviceId,
  })
  wx.closeBluetoothAdapter({})
})

# 4.6 断开连接和关闭蓝牙适配器

使用完成后,应该在合适的时机断开连接,并关闭蓝牙适配器。

# 5. 注意事项

  • iOS 上,对特征值的 readwritenotify 操作,由于系统需要获取特征值实例,传入的 serviceIdcharacteristicId 必须由 wx.getBLEDeviceServiceswx.getBLEDeviceCharacteristics 中获取到后才能使用。建议统一在建立连接后先执行 wx.getBLEDeviceServiceswx.getBLEDeviceCharacteristics 后再进行与蓝牙设备的数据交互。
  • 考虑到蓝牙功能可以间接进行定位,安卓 6.0 及以上版本,无定位权限或定位开关未打开时,无法进行设备搜索。
  • 安卓上,部分机型获取设备服务时会多出 0000180000001801 UUID 的服务,这是系统行为,注意不要使用这两个服务。
  • 建立连接和关闭连接必须要成对调用。如果未能及时关闭连接释放资源,安卓上容易导致 state 133 GATT ERROR 的异常。
  • 在与蓝牙设备传输数据时,需要注意 MTU(最大传输单元)。如果数据量超过 MTU 会导致错误,建议根据蓝牙设备协议进行分片传输。安卓设备可以调用 wx.setBLEMTU 进行 MTU 协商。在 MTU 未知的情况下,建议使用 20 字节为单位传输。
舌根放血有什么好处 asics是什么牌子 什么情况下打破伤风针 腮边长痘是什么原因 孙尚香字什么
节育环是什么 老舍的原名是什么 狗狗尾巴下垂代表什么 丁香花长什么样 白细胞计数偏高是什么原因
饱和脂肪酸是什么意思 01年属蛇的是什么命 胃动力不足是什么原因造成的 梨的功效与作用是什么 一什么不什么四字成语
养肝吃什么药 公元400年是什么朝代 化验肝功挂什么科 排卵期是什么时候开始算 喝什么茶对睡眠有帮助
暄字五行属什么hcv9jop1ns1r.cn nt和无创有什么区别hcv8jop2ns7r.cn 掉钱了是什么预兆hcv9jop5ns4r.cn 愿力是什么意思hcv7jop6ns4r.cn 痔瘘和痔疮有什么区别hcv8jop0ns9r.cn
一个黑一个出读什么hcv9jop6ns3r.cn 转氨酶高吃什么药效果好hcv8jop3ns8r.cn 神经痛吃什么药效果好hcv8jop7ns6r.cn 手麻脚麻是什么原因hcv8jop7ns6r.cn 心理学属于什么学科hcv8jop8ns8r.cn
三叉神经痛吃什么药好hcv7jop5ns0r.cn 痛风应该挂什么科hcv9jop4ns4r.cn 屁眼痒是什么原因hcv8jop2ns8r.cn 毳毛是什么hcv7jop6ns6r.cn 衣原体感染是什么意思hcv9jop3ns3r.cn
叶凡为什么找石昊求救hcv7jop5ns3r.cn 空调病是什么症状hcv9jop4ns7r.cn 转氨酶高是什么意思hcv8jop1ns6r.cn 生活补贴是什么意思hcv9jop1ns7r.cn 合拍是什么意思naasee.com
百度