在android中,蓝牙的持续状态有两种: on off,蓝牙的名字和状态是可以改变的,重启手机后,在上层蓝牙如何来记住自己的状态信息呢?
解决问题,
蓝牙地址每次开机都不一样
蓝牙名字修改后,再开机发现没有保存
蓝牙状态打开下关机,开机后发现蓝牙是关闭的
1,关于蓝牙地址:
正常情况下蓝牙地址在使用过程中是不会改变的,有的平台写NV的方式存储,而有的平台是用系统属性方式存储,但有一个共同的android接口,就是在bluetooth adapter中接口函数getAddress,而在AdapterProperties中的callback函数的值来源于bluedroid中函数btif_fetch_local_bdaddr函数,这个函数中封装了多种获取蓝牙地址的方法,详情查看其代码,因平台不同而异
2,关于蓝牙名字:
因为蓝牙名字在android运行过程中是可以改变的,所以有第一次开机蓝牙名字的来源,和后来蓝牙名字的存储地址:
第一次开机:BluetoothManagerservice通过adapter的回调函数从bluedroid中的函数btif_get_default_local _name中获取
上层保存方式:从bluedroid中获取到蓝牙名字后,因为蓝牙服务是基于settings进程的,故BluetoothManagerService就会把蓝牙地址和名字存储到Settings的database中
加载函数loadStoredNameAndAddress过程中,如果发现database中是空的,就会从bluedroid索取
3,关于蓝牙状态存储
在BluetoothManagerService init的时候,通过isBluetoothPersistedStateOn函数获取系统存储的蓝牙状态来决定是否打开蓝牙
120// Bluetooth persisted setting is off
121 private static final intBLUETOOTH_OFF=0;
122 // Bluetooth persisted setting is on
123 // and Airplane mode won't affect Bluetooth state at start up
124 private static final intBLUETOOTH_ON_BLUETOOTH=1;
125 // Bluetooth persisted setting is on
126 // but Airplane mode will affect Bluetooth state at start up
127 // and Airplane mode will have higher priority.
128 private static final intBLUETOOTH_ON_AIRPLANE=2;
蓝牙状态是通过Settings database Settings.Global.BLUETOOTH_ON存储
蓝牙打开过程 状态机状态改变:
28 STATE_OFF =10
29 STATE_TURNING_ON =11
30 STATE_ON =12
31 STATE_TURNING_OFF =13
32 STATE_BLE_TURNING_ON =14
33 STATE_BLE_ON =15
34 STATE_BLE_TURNING_OFF =16