安卓系统清理蓝牙缓存

安卓系统蓝牙缓存的作用


安卓手机连接BLE设备的时候,系统会缓存相关的信息,这样再次连接的时候,就可以直接从缓存中读取一些信息,进而提高连接以及获取服务的速度。




清理蓝牙缓存的原因


既然安卓系统缓存蓝牙信息是有上述作用的,那为什么我们还要去清理呢?清理蓝牙缓存的原因主要如下所述:

1.BLE设备配置OAD升级之后,ImageA进行了压缩,将压缩的空间腾出来给ImageB,这个时候ImageA的服务和特性较ImageB就有可能减少掉一些与升级无关的部分,如果ImageA和ImageB的服务和特性不一样了,但是同属于一个设备,也就是MAC是一样的,这样就会出现明明从ImageA升级到ImageB成功了,但是搜到的服务和特性却仍然是ImageA的。

 

2.平常调试开发的时候,在某一块特定的开发板上升级不同服务和特性的软件,情形类似1中的描述,这个时候也会出现软件更换了,但是搜索到的服务和特性却没有变的情况。

 

综上所述,清理蓝牙缓存最主要的应用场景是针对配置了OAD升级功能的BLE设备以及平常的开发调试。




清理蓝牙缓存的方法


清理蓝牙缓存的方法分为软件方法和非软件方法。

首先,我们来介绍软件方法,其实也就是代码实现。

1.关闭蓝牙,然后重新打开,代码实现如下:

private static BluetoothManager mBluetoothManager;

//通过BluetoothManager来获取BluetoothAdapter
mBluetoothManager = (BluetoothManager) getSystemService(Context.BLUETOOTH_SERVICE);
//一个Android系统只有一个BluetoothAdapter ,通过BluetoothManager 来获取
mBtAdapter = mBluetoothManager.getAdapter();

//打开蓝牙
mBtAdapter.enable();
//关闭蓝牙
mBtAdapter.enable();

上述代码段中获取BluetoothAdapter的过程应该是在应用刚打开的时候,之所以都罗列到一起,是为了便于理解。


2.重启蓝牙是需要一定时间的,而且可能用户体验上会有不少瑕疵,之所以出现前面描述的问题是因为蓝牙缓存的问题,其实更深入的讲是因为GATT层的缓存信息的影响,所以个人建议直接清理GATT的缓存。


通过查阅安卓API,发现没有公开的清理GATT层蓝牙缓存的方法,但是在android.bluetooth.BluetoothGatt类中有一个refresh方法,该方法的描述中正是清理GATT层缓存的方法,但是该方法是隐藏的,截图显示如下:



隐藏的方法我们是无法直接调用的,如果非要使用,可以采用java的反射机制进行调用,实现源码如下:

	/**
	 * Clears the internal cache and forces a refresh of the services from the
	 * remote device.
	 */
	public boolean refreshDeviceCache() {
		if (mBluetoothGatt != null) {
			try {
				BluetoothGatt localBluetoothGatt = mBluetoothGatt;
				Method localMethod = localBluetoothGatt.getClass().getMethod(
						"refresh", new Class[0]);
				if (localMethod != null) {
					boolean bool = ((Boolean) localMethod.invoke(
							localBluetoothGatt, new Object[0])).booleanValue();
					return bool;
				}
			} catch (Exception localException) {
				Log.i(TAG, "An exception occured while refreshing device");
			}
		}
		return false;
	}

其中,mBluetoothGatt是在连接建立的时候设置的,另外对于该方法的使用,最好在断开连接成功的回调方法中使用,即在你自己实现的BluetoothGattCallback对象的onConnectionStateChange方法中判断statusBluetoothProfile.STATE_DISCONNECTED的时候调用。


下面来介绍一下非软件方法

1.手动开关蓝牙或者重启手机。

2.清理蓝牙缓存。找到你的安卓手机的设置,然后按照下述操作:







往下滑动,找到清空缓存,然后点击清空缓存,显示如下:


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值