重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1.//依赖注入
网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、重庆小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了光泽免费建站欢迎大家使用!
2.根据生命周期来对业务逻辑进行处理
1.布局的声明
2.Activity生命周期来处理业务逻辑
3.手机震动方法处理(在扫描成功的方法中调用此方法就可以了)
private void vibrate() {
Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);
vibrator.vibrate(200);
}
Wifi scanning overview
必须权限如下:
除必须权限外,根据系统版本,还有不同的限制。具体如下
WifiManager.getScanResults() 方法的调用必须具备以下 任一 权限:
否则会抛异常 SecurityException 。
WifiManager.startScan() 方法的调用必须满足以下 所有 条件:
否则会抛异常 SecurityException 。
Android对 WifiManager.startScan() 的调用频率进行了限制。对于超过此频率的接口访问, WifiManager 不会执行完整扫描,而是提供上次扫描所缓存的结果。
平均值:2211
wifi扫描有两个必须权限:
另外,随着Android系统的升级,对WiFi扫描做了越来越严格的限制。系统对 WifiManager.getScanResults() 和 WifiManager.startScan() 所做的限制不太一样,但若要实现一个完整的WiFi扫描,就需要“扫描+获取”两个步骤,因此综合来看,WiFi扫描的行为变化如下:
需要同时满足以下所有条件:
font color='red'注意:以上是官方文档的说明,与实际测试的结果有出入,可能是手机厂商修改rom导致。/font
(小米MIX2 8.0,三星N9600 8.1.0下,不开定位服务也能获取到WiFi列表)
蓝牙扫描的目的在于发现设备或者接收设备广播,设备包括经典蓝牙设备和BLE蓝牙设备,这两种设备的扫描方式不同。
对于经典蓝牙设备,扫描是通过调用startDiscovery接口,返回的结果是通过BroadcastReceiver接收的,可以获取设备MAC地址,名称以及RSSI。
startDiscovery是个异步调用,会立即返回。如果不调用cancelDiscovery主动停止扫描的话,最多扫描12s。
广播主要监听以下几个Action:
BluetoothDevice.ACTION_FOUND
BluetoothAdapter.ACTION_DISCOVERY_STARTED
BluetoothAdapter.ACTION_DISCOVERY_FINISHED
另外要注意startDiscovery返回的设备不包括已配对设备,如要获取已配对设备,需要额外调用getBondedDevices。
对于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设备多的时候,容易导致底层堵塞,如果有耗时操作请丢到子线程中去处理。如解析广播识别设备等操作可能会较耗时。
四,实践中发现同样一个设备,有的手机很容易就扫出来了,有的手机很难扫出来。这种情况建议可以多扫几次,每次扫描时间短一点。