【Android】【bluetooth 】如何记住蓝牙地址名字和状态

在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







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值