美文网首页
Android蓝牙扫描

Android蓝牙扫描

作者: dingjikerbo | 来源:发表于2018-11-12 11:45 被阅读0次

蓝牙扫描的目的在于发现设备或者接收设备广播,设备包括经典蓝牙设备和BLE蓝牙设备,这两种设备的扫描方式不同。

经典蓝牙设备

对于经典蓝牙设备,扫描是通过调用startDiscovery接口,返回的结果是通过BroadcastReceiver接收的,可以获取设备MAC地址,名称以及RSSI。

startDiscovery是个异步调用,会立即返回。如果不调用cancelDiscovery主动停止扫描的话,最多扫描12s。

广播主要监听以下几个Action:

BluetoothDevice.ACTION_FOUND

BluetoothAdapter.ACTION_DISCOVERY_STARTED

BluetoothAdapter.ACTION_DISCOVERY_FINISHED

另外要注意startDiscovery返回的设备不包括已配对设备,如要获取已配对设备,需要额外调用getBondedDevices。

BLE蓝牙设备

对于BLE蓝牙设备,扫描是通过调用startLeScan接口,返回的结果是通过onLeScan回调,除了获得设备MAC地址,名称及RSSI之外还能获取设备广播,广播是以byte数组的形式表示的。

较新的Android版本提供了新的扫描接口,可更灵活地配置扫描策略,详情可参考官网文档,此处不再赘述。

要注意的问题

一,需要打开以下权限

android.permission.BLUETOOTH

android.permission.ACCESS_COARSE_LOCATION

android.permission.BLUETOOTH_ADMIN

android.permission.ACCESS_FINE_LOCATION

另外还要注意动态权限问题,在Android 6.0(targetSdkVersion>=23)之后,需要动态申请获取用户位置的权限,不然获取不到设备扫描结果。

二,startDiscovery在大多数手机上是可以同时发现经典蓝牙和Ble的,但是startDiscovery的回调无法返回BLE的广播,所以无法通过广播识别设备,且startDiscovery扫描BLE的效率比startLeScan低很多。所以在实际应用中,还是startDiscovery和startLeScan分开扫,前者扫经典蓝牙,后者扫低功耗蓝牙。

三,startLeScan() 的时候,在onLeScan() 中不能做耗时操作,特别是周围的BLE设备多的时候,容易导致底层堵塞,如果有耗时操作请丢到子线程中去处理。如解析广播识别设备等操作可能会较耗时。

四,实践中发现同样一个设备,有的手机很容易就扫出来了,有的手机很难扫出来。这种情况建议可以多扫几次,每次扫描时间短一点。

相关文章

  • android蓝牙BLE(四) —— 实战

    android BLE系列: android蓝牙BLE(一) —— 扫描 android蓝牙BLE(二) —— 通...

  • android蓝牙BLE(三) —— 广播

    android BLE系列: android蓝牙BLE(一) —— 扫描 android蓝牙BLE(二) —— 通...

  • android蓝牙BLE(二) —— 通信

    android BLE系列: android蓝牙BLE(一) —— 扫描 android蓝牙BLE(二) —— 通...

  • android蓝牙BLE(一) —— 扫描

    android BLE系列: android蓝牙BLE(一) —— 扫描 android蓝牙BLE(二) —— 通...

  • Android蓝牙API介绍

    引用自:Android蓝牙API 1.简介 通过蓝牙API,可以实现以下内容: 扫描其他蓝牙设备 查询配对蓝牙设备...

  • Android 蓝牙可见性开启与关闭

    Android 蓝牙可见性开启与关闭 定制的Android设备只有在蓝牙页面才能被扫描搜索到,要求软件开启启动后作...

  • Android蓝牙扫描

    蓝牙扫描的目的在于发现设备或者接收设备广播,设备包括经典蓝牙设备和BLE蓝牙设备,这两种设备的扫描方式不同。 经典...

  • Android蓝牙BLE入门

    Manifest文件权限配置说明 使用蓝牙,扫描蓝牙和设置蓝牙设置需要用到 Android 5.0以上需要额外配置...

  • Android 经典蓝牙开发(一)

    经典蓝牙学习记录 Android app 可通过Bluetooth API 执行以下操作: 扫描其他蓝牙设备 查询...

  • 蓝牙问题集锦

    扫描蓝牙 手机锁屏状态下,后台服务无法扫描蓝牙设备频繁扫描,导致扫描蓝牙失败定位服务关闭时,后台无法扫描蓝牙

网友评论

      本文标题:Android蓝牙扫描

      本文链接:https://www.haomeiwen.com/subject/dcwxfqtx.html