frameworks/base/packages/SettingsProvider/res/values/defaults.xml
<bool name="def_bluetooth_on">false</bool>
将 def_bluetooth_on 的值设为true,打开蓝牙
adb动态设置
adb shell settings put global bluetooth_on 0 #关闭
adb shell settings put global bluetooth_on 1 #打开
adb shell settings get global bluetooth_on #查询
打开蓝牙
am start -a android.bluetooth.adapter.action.REQUEST_ENABLE
查看蓝牙状态
service list | grep bluetooth
dumpsys package com.android.bluetooth | grep "version"
dumpsys bluetooth_manager
logcat -s BluetoothManager
问题:为什么Settings界面的打开蓝牙图标,测试机不能Scan到对端设备?
Android默认的行为是:只有在setting->bluetooth界面,才会开启蓝牙的可见性。
只在 status bar打开BT的话,是不会开启蓝牙可见性的。还需要可见性设置,确保已经将可见性设置为“可被发现”或“可连接和可被发现”
打开bluetooth可见性,设置为可连接和可被发现
android12/packages/apps/Bluetooth/src/com/android/bluetooth/btservice/AdapterProperties.java
void onBluetoothReady() {
debugLog("onBluetoothReady, state=" + BluetoothAdapter.nameForState(getState())
+ ", ScanMode=" + mScanMode);
synchronized (mObject) {
// Reset adapter and profile connection states
setConnectionState(BluetoothAdapter.STATE_DISCONNECTED);
mProfileConnectionState.clear();
invalidateGetProfileConnectionStateCache();
mProfilesConnected = 0;
mProfilesConnecting = 0;
mProfilesDisconnecting = 0;
// adapterPropertyChangedCallback has already been received. Set the scan mode.
// setScanMode(AbstractionLayer.BT_SCAN_MODE_CONNECTABLE);/*可连接*/
setScanMode(AbstractionLayer.BT_SCAN_MODE_CONNECTABLE_DISCOVERABLE); /*可连接和可被发现*/
// This keeps NV up-to date on first-boot after flash.
setDiscoverableTimeout(mDiscoverableTimeout);
}
}
蓝牙匹配自动连接
自动配对过程
android12/packages/apps/Settings/src/com/android/settings/bluetooth/BluetoothPairingRequest.java
参考:
https://blog.csdn.net/weixin_40537714/article/details/107668527?
https://www.cnblogs.com/doubleWin/p/10330686.html