如何在禁用后再次启用蓝牙?

时间:2013-10-01 11:57:08

标签: java android android-bluetooth

我需要停用Bluetooth并再次启用它。我以这种方式禁用它:

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();    
if (mBluetoothAdapter.isEnabled()) {
mBluetoothAdapter.disable(); 
}

但是我不能以这种方式再次启用它(运行此代码后没有任何反应):

mBluetoothAdapter.enable();

为什么?

2 个答案:

答案 0 :(得分:3)

由于这涉及到修补实际硬件,我认为你必须等待一段时间才能启用它。在启用...之前,您可以尝试使用Thread.sleep(500)1000查看。

BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();    
if (mBluetoothAdapter.isEnabled()) {
    mBluetoothAdapter.disable(); 
    Thread.sleep(500); //code for dealing with InterruptedException not shown
    mBluetoothAdapter.enable(); 
}

然而,这是不稳定的,有幻数解决与硬件设备的事件相关的问题并不好。没有保证在所有情况下都有明确的行为(不同的设备,不同的情况等......)

如果适配器仅在完全禁用时报告禁用状态,您可以尝试以下几行:

int retry=0;
while(retry++<5) {
     if (!mBluetoothAdapter.isEnabled()) {
        mBluetoothAdapter.enable(); 
     }
     Thread.sleep(100); //again, InterruptedException handling not shown
}

if(retry==5) {
    //Ooops, still not successful. Handle situation here.
}

所以用语言:较小的延迟,但重试一次,并检查它是否已被禁用。

答案 1 :(得分:0)

如果您通过蓝牙套接字传输数据,则会发生这种情况。一个插座 - 使用1个端口。您可以启用\禁用蓝牙,而不会填充所有套接字端口(大约30个)。所以一个问题 - 如何解决这个问题,所以答案 - 跟踪关闭\打开套接字。可能有帮助。