在了解了API里面的常用类和方法后,现在来看蓝牙打开和扫描的实现
蓝牙扫描
蓝牙扫描实现的基本步骤如下:
1.添加权限
2.判断设备是否支持BLE
3.判断蓝牙是否开启,如果未开启,则弹出开启窗口
4.开启后,开始进行蓝牙扫描
5.通过BluetoothAdapter.LeScanCallback获取扫描结果
下面具体来实现蓝牙的扫描过程
1.权限的添加
在AndroidManifest.xml文件里面添加:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
除了蓝牙权限外,如果需要BLE feature则还需要声明uses-feature:
<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
required为true时,则应用只能在支持BLE的Android设备上安装运行;required为false时,Android设备均可正常安装运行,需要在代码运行时判断设备是否支持BLE feature
2.判断设备是否支持BLE
因为在Api18(4.3)以下是不支持BLE的,如果系统版本小于4.3,则不会再进行下一步操作,在4.3以上的系统中,则去获取BluetoothAdapter, BluetoothAdapter是从系统服务获取到的,全系统就一个,获取到BluetoothAdapter,我们才能进行下一步操作,具体实现代码如下:
/**
* 判断是否支持蓝牙设备
* @return
*/
public boolean isBluetoothValid(){
if(Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN_MR1 ||
!mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)){
return false;
}
BluetoothManager bluetoothManager = (BluetoothManager) mContext.getSystemService(Context.BLUETOOTH_SERVICE);
mAdapter = bluetoothManager.getAdapter();
if(mAdapter == null){
return false ;
}
return true ;
}
3.判断蓝牙是否开启
上面已经获取到了BluetoothAdapter,通过
/**
* 判断蓝牙是否打开
* @return
*/
private boolean isBluetoothOpen() {
// BluetoothManager bManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
// BluetoothAdapter mAdapter = bManager.getAdapter();
return mAdapter.isEnabled();
}
就可以获取蓝牙是否开启,如果没开启,则开启蓝牙
private void enableBluetooth(){
if(!mAdapter.isEnabled()){
mAdapter.enable();
}
}
整个判断过程如下:
if(isBluetoothValid()){ //判断设备是否支持Ble蓝牙
if(isBluetoothOpen()){ //蓝牙已经打开,则开始进行蓝牙搜索
scanDevice();
}else{ //如果蓝牙没有打开,则弹出Dialog窗口提示用户进行打开,此