本章节记录如何构建蓝牙设置。
LocalBluetoothManager 是操作蓝牙的主要入口。
1.通过 LocalBluetoothManager,可以获取到LocalBluetoothAdapter;CachedBluetoothDeviceManager;BluetoothEventManager、LocalBluetoothProfileManager。
2.通过 BluetoothEventManager.registerCallback 注册回调,就可以
监听蓝牙状态变化、设备搜索、连接状态等信息。
3.注册BluetoothCallback.onBluetoothStateChanged 回调即可监听蓝牙开关状态。
可以通过LocalBluetoothAdapter.enable()打开蓝牙。
4.注册BluetoothCallback.onScanningStateChanged来监听蓝牙搜索状态,
当调用LoalBluetoothAdapter.startScanning 开始搜索后搜索到的设备通过
BluetoothCallback.onDeviceAdded 回调给 App。
5.最后通过 CachedBluetoothDevice.connect发起连接搜索到的指定设备。
添加蓝牙相关权限:
AndroidManifest.xml :
初始化蓝牙相关接口
//获取蓝牙相关对象
mLocalBluetoothManager = LocalBluetoothManager.getInstance(context,mOnInitCallback);
mCachedDeviceManager = mLocalBluetoothManager.getCachedDeviceManager();
mBluetoothEventManager = mLocalBluetoothManager.getEventManager();
mBluetoothProfileManager = mLocalBluetoothManager.getProfileManager();
//注册回调
mBluetoothEventManager.registerCallback(mBluetoothCallback);
mBluetoothProfileManager.addServiceListener(mServiceListener);
实现 ServiceListener,以监听 Profile 相关接口
LocalBluetoothProfileManager.ServiceListener mServiceListener = new LocalBluetoothProfileManager.ServiceListener() {
void onServiceConnected() {
//蓝牙已经打开,可以调用各 Profile 的接口了,比如可以获取连接状态,连接蓝牙设备等。
}
void onServiceDisconnected() {
//蓝牙已经关闭
}
};
监听蓝牙各状态变化,至于设备的连接或者断开主要通过CachedBluetoothDevice对象操作。
BluetoothCallback mBluetoothCallback = new BluetoothCallback() {
void onBluetoothStateChanged(int bluetoothState) {
//蓝牙开关状态变化
}
void onScanningStateChanged(boolean started) {
//蓝牙搜索状态变化
}
void onDeviceAdded(CachedBluetoothDevice cachedDevice) {
//搜索到新设备
}
void onDeviceDeleted(CachedBluetoothDevice cachedDevice) {
//配对的设备被移除
}
void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice, int bondState) {
//设备配对状态变化
}
void onConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state) {
//设备连接状态变化
}
void onActiveDeviceChanged(CachedBluetoothDevice activeDevice, int bluetoothProfile) {
//活动设备变化
}
void onProfileConnectionStateChanged(CachedBluetoothDevice cachedDevice) {
//Profile协议连接状态变化(a2db;hdcp)
}
};