在日常使用蓝牙的过程中,想必大家都发现了这样一个现象:连接蓝牙设备的手机在关闭再重新打开蓝牙后,会自动连接上先前连接着的那个设备,同样的场景对于安卓车机系统效果也是一致的。本篇文章我们就来聊一聊安卓系统中蓝牙的自动重连机制。
由于蓝牙分为Server和Client两端,也就是手机和蓝牙设备(车机系统)这两类具体载体,所以蓝牙重连机制也会有所差异,但是整体上的流程基本相同:
监听蓝牙的状态变化->获取关闭蓝牙前连接的设备信息->自动连接
一、手机蓝牙自动重连机制
手机蓝牙自动重连机制主要在进程 com.android.bluetooth 中实现的。
源码位置:/packages/apps/Bluetooth/src/com/android/bluetooth/btservice/PhonePolicy.java
private void autoConnect() {
if (mAdapterService.getState() != BluetoothAdapter.STATE_ON) {
errorLog("autoConnect: 蓝牙未打开. 推出自动重连");
return;
}
if (!mAdapterService.isQuietModeEnabled()) {
debugLog("autoConnect: Initiate auto connection on BT on...");
final BluetoothDevice mostRecentlyActiveA2dpDevice = mDatabaseManager.getMostRecentlyConnectedA2dpDevi