我的 Android 应用程序非常简单。它所做的只是无限执行以下循环(伪代码)
int longEnough = 12sec;
if (btAdapter.isDiscovering()){
btAdapter.cancelDiscovery();
}else{
btAdapter.startDiscovery();
wait(longEnough);
}
问题是它的工作非常不稳定。迟早,但它总是被冻结。调试器显示在 Android 内部某处,调用initSocketNative
不成功。这是logcat的摘录
11-07 17:00:57.969: WARN/System.err(1473): java.io.IOException: Unknown error: 0
11-07 17:00:57.969: WARN/System.err(1473): at android.bluetooth.BluetoothSocket.initSocketNative(Native Method)
11-07 17:00:57.969: WARN/System.err(1473): at android.bluetooth.BluetoothSocket.<init>(BluetoothSocket.java:153)
11-07 17:00:57.969: WARN/System.err(1473): at android.bluetooth.BluetoothServerSocket.<init>(BluetoothServerSocket.java:77)
11-07 17:00:57.969: WARN/System.err(1473): at android.bluetooth.BluetoothAdapter.createNewRfcommSocketAndRecord(BluetoothAdapter.java:983)
11-07 17:00:57.969: WARN/System.err(1473): at android.bluetooth.BluetoothAdapter.listenUsingRfcommWithServiceRecord(BluetoothAdapter.java:935)
11-07 17:00:57.969: WARN/System.err(1473): at com.mobileleader.sync.obex.connection.BluetoothConnection$AcceptThread.run(BluetoothConnection.java:136)
崩溃发生后,所有后续调用adapter.isDiscovering()
returntrue
和 Android 忽略所有调用cancelDiscovery()
. 有一次,我一直在等待 10 分钟(只是为了实验)直到它恢复。当然,没有运气。
测试环境包括一些 2.3.x 的 Android 设备。
问题是:我面对的是什么?