1

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

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

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

mBluetoothAdapter.enable();

为什么?

4

2 回答 2

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.
}

换句话说:延迟更小,但重试几次,并检查它是否已被禁用。

于 2013-10-01T12:01:44.517 回答
0

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

于 2013-10-01T12:06:17.387 回答