接收BluetoothAdapter.STATE_TURNING_OFF时,与蓝牙服务器保持一致的正常断开连接

时间:2015-11-05 01:11:23

标签: android bluetooth

当用户关闭蓝牙时,我无法正常地与服务器断开连接。当发生这种情况时,Android会生成一个事件,您应该使用该事件向服务器发送最终断开连接消息;在您的应用程序失去对蓝牙功能的访问权之前。

我注册了这样的事件:

context.registerReceiver(this, new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED));

然后我会听取具体事件:

public void onReceive(Context context, Intent intent) {
    final int state = 
        intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
    switch (state) {
        case BluetoothAdapter.STATE_TURNING_OFF: 
             _bt.stop(); 
             break;
        //...
    }
}

这种方法有效但不是每次都有效。我尝试给线程一个更高的优先级,看看它是否有助于(或者)这两个:

Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_DISPLAY);

......但没有运气。关于如何始终如一地实现这一点的任何想法都值得欢迎,谢谢!

1 个答案:

答案 0 :(得分:0)

因此,最终为我工作的是使用两个优先级语句,并在生成事件后立即尝试发送消息。这样,我一直与服务器断断续续。这就是我的代码最终看起来的方式:

public void onReceive(Context context, Intent intent) {
    Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
    android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_URGENT_DISPLAY);
    final int state = 
        intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
    switch (state) {
        case BluetoothAdapter.STATE_TURNING_OFF: 
            // send disconnection message
            _bt.stop(); 
            break;
        //...
    }
}

希望它可以帮助别人。