当用户关闭蓝牙时,我无法正常地与服务器断开连接。当发生这种情况时,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);
......但没有运气。关于如何始终如一地实现这一点的任何想法都值得欢迎,谢谢!
答案 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;
//...
}
}
希望它可以帮助别人。