【车机蓝牙宝】 蓝牙链接部分的简单分享
2023-09-18 本文已影响0人
TheLazyCoder
背景:每次启动车子,手机都不会跟汽车蓝牙自动链接。身为开车必听歌的强迫症患者,每次上车手动链接都很耗时,最近受李跳跳的启发,感觉可以基于安卓的后台保活机制,来自动链接蓝牙以此解放双手。
基本工作原理:
基于安卓的无障碍模式保活、每十秒自动扫描周围蓝牙设备。当发现汽车蓝牙后,自动进行链接。
注:得益于现在蓝牙5.0的低功耗,所以长时间的蓝牙扫描,并不会明显影响手机续航能力
核心链接汽车蓝牙代码
public void connect(Context context, BluetoothDevice scanDevice) {
if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
return;
}
if (scanDevice.getBluetoothClass().getMajorDeviceClass() != BluetoothClass.Device.Major.AUDIO_VIDEO) {
return;
}
mBluetoothAdapter.getProfileProxy(context, new BluetoothProfile.ServiceListener() {
@Override
public void onServiceConnected(int profile, BluetoothProfile proxy) {
BluetoothHeadset bluetoothHeadset = (BluetoothHeadset) proxy;
Class btHeadsetCls = BluetoothHeadset.class;
try {
Method connect = btHeadsetCls.getMethod("connect", BluetoothDevice.class);
connect.setAccessible(true);
connect.invoke(bluetoothHeadset, scanDevice);
} catch (Exception e) {
Log.e(TAG, e + "");
}
}
@Override
public void onServiceDisconnected(int profile) {
}
}, BluetoothProfile.HEADSET);
}