本文简要介绍如何在Android中进行BLE device的Scan,实验平台Android 7, 编译SDK 28(android 9).
增加权限
manifest 修改
在AndroidManifest.xml中增加
1 | <uses-feature android:name="android.bluetooth.le" android:required="true"/> |
APK中请求位置权限
Android5以上版本必须要ACCESS_COARSE_LOCATION权限,否则无法scan到device, 在scan device前调用mayRequestLocation请求ACCESS_COARSE_LOCATION权限
1 | private static final int REQUEST_COARSE_LOCATION = 0; |
扫描过程
检查SDK是否支援BLE
1 | if(!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)){ |
检查HW是否有蓝牙
1 | BluetoothManager bluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE); |
检查是否开启蓝牙
1 | if(!mBluetoothAdapter.isEnabled()){ |
扫描BLE Device
实现扫描Callback
1 | ScanCallback mScanCB = new ScanCallback() { |
启动扫描
将实现的扫描callback注册启动扫描,如果由扫到device会回调到onScanResult,在onScanResult中处理扫描到的device
1 | BluetoothLeScanner mScanner = mBluetoothAdapter.getBluetoothLeScanner(); |
停止扫描
1 | mScanner.stopScan(mScanCB); |