安卓蓝牙通信

Android中的蓝牙

说到Android中的蓝牙,大家听到的可能有蓝牙1.0、蓝牙2.0、蓝牙3.0、蓝牙4.0之类的以数字结尾的蓝牙版本号,而实际上,在最新的标准中,已经不再使用数字版本号作为蓝牙版本的区分了,取而代之的是经典蓝牙与低功耗蓝牙(BLE)这两种区别。最官方的蓝牙版本称呼就是,单模蓝牙、双模蓝牙和经典蓝牙。

流程 

  • 发现设备->配对/绑定设备->建立连接->数据通信

蓝牙的选用

既然有经典蓝牙和低功耗蓝牙之分,我们在设计物联网产品和智能硬件产品的时候,如何选择呢?

      经典蓝牙:蓝牙最初的设计意图,是打电话放音乐。3.0版本以下的蓝牙,都称为“经典蓝牙”。功耗高、传输数据量大、传输距离只有10米。

      低功耗蓝牙:就是BLE,通常说的蓝牙4.0(及以上版本)。低功耗,数据量小,距离50米左右。

传声音的,用经典蓝牙:

      如蓝牙耳机、蓝牙音箱。蓝牙设计的时候就是为了传声音的,所以是近距离的音频传输的不二选择。

电池供电、连手机APP的,用BLE:

      如共享单车锁、蓝牙智能锁、蓝牙防丢器、蓝牙室内定位,是目前手机和智能硬件通信的性价比最高的手段。直线距离约50米,一节5号电池能用一年,传输模组成本10块钱,远比WIFI、4G等大数据量的通信协议更实用。

又要声音又要数据的,用双模蓝牙:      双模蓝牙,就是同时支持经典蓝牙音频和低功耗蓝牙。

      如智能电视遥控器、降噪耳机等。很多智能电视配的遥控器带有语音识别,需要用经典蓝牙才能传输声音

传大数据量的,用经典蓝牙:      如某些工控场景,使用Android或Linux主控,外挂蓝牙遥控设备的,可以使用经典蓝牙里的SPP协议,当作一个无线串口使用。速度比BLE传输快多了。

远距离的,不用蓝牙。      固定供电的、不考虑功耗的、要传超过几十米距离的、要传高速数据的,这些都不适合蓝牙。远距离的可以用2G、4G、NB-IOT,大数据量的可以用WIFI。
 

https://developer.android.google.cn/guide/topics/connectivity/bluetooth?hl=zh_cn

开发注意事项:

  //这里注意,本人在开发中遇到的是 经常有的蓝牙设备是没有名字的, (device.getName == null)
  //不知道这是什么原因引起的,后来跟很多蓝牙高手讨论的是结果初步怀疑应该是芯片的问题
  //尤其是MTK的芯片经常出现这种问题,换了搭载高通和华为的芯片的设备就没问题了。

明明已经扫描到了,在回调中已经有了 BluetoothDevice 为何还要去 getRemoteDevice(address)?
那是因为,很多低功耗的设备开机时间是很少的他是开机才开启蓝牙,而测量完了之后过一段时间就会自动关闭。所以防止去连接设备的时候设备已经关机的情况

这里是比较重要的地方,注意,每一个蓝牙的通讯协议不通,有的设备是连接了之后不需要任何操作就等待蓝牙设备上传数据的,而有的设备是需要手动打开数据通道!或者发送指令给蓝牙设备,每一个Gatt协议中有多个BluetoothGattService,而每个BluetoothGattService中又有多个BluetoothGattCharacteristic (我把它看做一个数据通道-_-!),而每一个BluetoothGattCharacteristic 的属性是不同的,有的是可读,有的是可写,有的是可订阅,所以一定不要搞混了,可以用UUID区分他们,这里大多数设备厂家都会给一份设备的通讯协议其中就有 哪一个UUID 代表什么。都会有说明。通过UUID 获取到了对应的BluetoothGattCharacteristic 之后就可以判断他的属性是什么。一般向设备发送什么指令在通讯协议上面也是有的,都是发送一个byte[]数组,每一位代表什么协议里面都是不同的。

关于一些坑:

  1. 很多厂家很坑爹,给的文档水的要命,第一时间要看看文档详细不详细,如果没有文档至少也要给个Demo.

  2. 注意设备的开机时间,自动关机时间,对状态的保存。

  3. 很多设备在自动关机之后的回调是很慢的,甚至设备关机10秒之后才会回调到连接状态的回调方法中。

  4. 关于手动设置断开 gatt.disConnect() 这个方法,我试过了,调用之后确实会立即回调到对应的状态方法中,但是实际上物理上的连接是还没有断开的。物理上的连接断开之后还会再次回调到方法中。这是一个比较漫长的回调,区别与设备,不通设备的机制不一样,有的快,有的慢。

=========================================================

以下为蓝牙各版本的说明。

  1. 1.1 为最早期版本,传输率约在748~810kb/s,因是早期设计,容易受到同频率之产品所干扰下影响通讯质量。

  2. 蓝牙1.2标准

    1.2 同样是只有 748~810kb/s 的传输率,但在加上了(改善 Software)抗干扰跳频功能。

  3. 蓝牙2.0标准

    2.0 是 1.2 的改良提升版,传输率约在 1.8M/s~2.1M/s,开始支持双工模式——即一面作语音通讯,同时亦可以传输档案/高质素图片,2.0 版本当然也支持 Stereo 运作。

    应用最为广泛的是Bluetooth 2.0+EDR标准,该标准在2004年已经推出,支持Bluetooth 2.0+EDR标准的产品也于2006年大量出现。

    虽然Bluetooth 2.0+EDR标准在技术上作了大量的改进,但从1.X标准延续下来的配置流程复杂和设备功耗较大的问题依然存在。

  4. 蓝牙2.1标准

    2007年8月2日,蓝牙技术联盟今天正式批准了蓝牙2.1版规范,即“蓝牙2.1+EDR”,可供未来的设备自由使用。和2.0版本同时代产品,目前仍然占据蓝牙市场较大份额,相对2.0版本主要是提高了待机时间2倍以上,技术标准没有根本性变化。

  5. 蓝牙3.0标准

    2009年4月21日,蓝牙技术联盟(Bluetooth SIG)正式颁布了新一代标准规范"Bluetooth Core Specification Version 3.0 High Speed"(蓝牙核心规范3.0版 ),蓝牙3.0的核心是"Generic Alternate MAC/PHY"(AMP),这是一种全新的交替射频技术,允许蓝牙协议栈针对任一任务动态地选择正确射频。

    蓝牙3.0的数据传输率提高到了大约24Mbps(即可在需要的时候调用802.11 WI-FI用于实现高速数据传输)。在传输速度上,蓝牙3.0是蓝牙2.0的八倍,可以轻松用于录像机至高清电视、PC至PMP、UMPC至打印机之间的资料传输,但是需要双方都达到此标准才能实现功能。

  6. 蓝牙4.0标准

    蓝牙4.0规范于2010年7月7日正式发布,新版本的最大意义在于低功耗,同时加强不同OEM厂商之间的设备兼容性,并且降低延迟,理论最高传输速度依然为24Mbps(即3MB/s),有效覆盖范围扩大到100米(之前的版本为10米)。该标准芯片被大量的手机、平板所采用,如苹果The New iPad平板电脑,以及苹果iPhone 5、魅族MX4、HTC One X等手机上带有蓝牙4.0功能。

  7. 蓝牙4.1标准

    蓝牙4.1于2013年12月6日发布,与LTE无线电信号之间如果同时传输数据,那么蓝牙4.1可以自动协调两者的传输信息,理论上可以减少 其它信号对蓝牙4.1的干扰。改进是提升了连接速度并且更加智能化,比如减少了设备之间重新连接的时间,意味着用户如果走出了蓝牙4.1的信号范围并且断开连接的时间不算很长,当用户再次回到信号范围中之后设备将自动连接,反应时间要比蓝牙4.0更短。最后一个改进之处是提高传输效率,如果用户连接的设备 非常多,比如连接了多部可穿戴设备,彼此之间的信息都能即时发送到接接收设备上。

    除此之外,蓝牙4.1也为开发人员增加了更多的灵活性,这个改变对普通用户没有很大影响,但是对于软件开发者来说是很重要的,因为为了应对逐渐兴起的可穿戴设备,那么蓝牙必须能够支持同时连接多部设备。

    目前支持该标准的手机还比较少,三星GALAXY Note4则是其中具有代表性的一款。

  8. 蓝牙4.2标准

    2014年12月4日,最新的蓝牙4.2标准颁布,改善了数据传输速度和隐私保护程度,并接入了该设备将可直接通过IPv6和6LoWPAN接入互联网。在新的标准下蓝牙信号想要连接或者追踪用户设备必须经过用户许可,否则蓝牙信号将无法连接和追踪用户设备。

    速度方面变得更加快速,两部蓝牙设备之间的数据传输速度提高了2.5倍,因为蓝牙智能(Bluetooth Smart)数据包的容量提高,其可容纳的数据量相当于此前的10倍左右。蓝牙的版本自然是越高级越好,考虑到传输距离和功耗的问题,最新的蓝牙4.1是优选,但是目前市场上蓝牙4.1的产品并不多,而主流的蓝牙4.0产品性价比更高,至于蓝牙3.0、2.1及以下的版本已经失去选购的价值。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值