在项目中遇到这样的情况 设置完蓝牙名字后 获取到的名字都是有时候是旧的,获取多几次后才会是新的
解决方案:
final BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
final long outTimeMs = System.currentTimeMillis() + 10000;
final Handler handler = new Handler();
bluetoothAdapter.enable();//开启蓝牙
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (bluetoothAdapter.isEnabled()) {
bluetoothAdapter.setName(newName);
handler.postDelayed(new TimerTask() {
@Override
public void run() {
if (bluetoothAdapter.getName().equals(newName)) {//直到名字是自己想要设置的名字为止
bluetoothAdapter.disable();
}else {
if (System.currentTimeMillis() < outTimeMs) {
handler.postDelayed(this, 500);
}
}
}
}, 500);
} else {
if (System.currentTimeMillis() < outTimeMs) {
handler.postDelayed(this, 500);
}
}
}
}, 500);
代码大致意思就是开启蓝牙, 然后使用handler延时等待蓝牙开启,开启后设置名字,然后再延时等待到获取的蓝牙名字为自己想要设置的名字后再关闭蓝牙。当然为了防止一些意外,做了时间的timeout。当然这里的代码有点粗糙,各种回调,就是一个大致的意思
网友评论