Android 滞后/不稳定的蓝牙连接
Android lagging / instable bluetooth connection
我在使用不安全的 RFCOMM 连接连接到 WML-C46 AH 蓝牙芯片时遇到问题。我编写了一个只有相关代码的 android 应用程序来向您展示我的问题。
应用程序
该应用程序只有一个按钮。如果单击此按钮,则会启动蓝牙设备发现。发现完成后,应用程序连接到蓝牙设备(我只使用一个蓝牙设备进行测试,因此找不到任何其他设备)。然后它打开一个输入流来读取这个设备的数据。如果连接中断(抛出 ioexception)或再次单击按钮,则关闭连接(关闭所有线程、套接字和流)。如果您再次单击该按钮,则会启动新设备发现,依此类推...
问题
连接不正常。数据输入流似乎有点滞后,有时连接中断而没有任何明显的原因(IOException:软件导致连接中止或 IOException:再试一次)。它几乎是 android 蓝牙聊天示例的简化版本,它使用设备发现而不是配对设备和一个活动。
密码
public class MainActivity extends Activity implements View.OnClickListener {
BluetoothDevice btDevice; @Override Button btn = (Button) findViewById(R.id.button1); IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); @Override @Override new Thread(new Runnable() { try { // block until device discovery has finished btSocket = btDevice.createInsecureRfcommSocketToServiceRecord(UUID inStream = btSocket.getInputStream(); new Thread(new Runnable() { private void disconnect() { try { btDevice = null; private final BroadcastReceiver btReceiver = new BroadcastReceiver() { |
我只是使用阻塞方法或自己进行阻塞。因此,连接建立工作非常程序化。当我调整它时,我可能已经丢失了 android 示例的连接流程,但我找不到问题。
输出
建立连接:
01-16 16:52:46.234: V/BluetoothSocket.cpp(6961): initSocketNative
01-16 16:52:46.234: V/BluetoothSocket.cpp(6961): ...fd 47 created (RFCOMM, lm = 0) 01-16 16:52:46.234: V/BluetoothSocket.cpp(6961): initSocketFromFdNative 01-16 16:52:46.257: D/BluetoothUtils(6961): isSocketAllowedBySecurityPolicy start : device null 01-16 16:52:47.171: V/BluetoothSocket.cpp(6961): connectNative 01-16 16:52:47.570: V/BluetoothSocket.cpp(6961): ...connect(47, RFCOMM) = 0 (errno 115) |
连接中断:
01-16 16:53:38.539: D/EXCEPTION IN LISTENER(6961): java.io.IOException: Software caused connection abort
01-16 16:53:38.539: D/EXCEPTION IN LISTENER(6961): at android.bluetooth.BluetoothSocket.readNative(Native Method) 01-16 16:53:38.539: D/EXCEPTION IN LISTENER(6961): at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:388) 01-16 16:53:38.539: D/EXCEPTION IN LISTENER(6961): at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:60) 01-16 16:53:38.539: D/EXCEPTION IN LISTENER(6961): at com.example.bttest.MainActivity$2$1.run(MainActivity.java:100) 01-16 16:53:38.539: D/EXCEPTION IN LISTENER(6961): at java.lang.Thread.run(Thread.java:856) |
谢谢!
发现问题。蓝牙设备未按预期工作,并在几秒钟后关闭连接。然而,代码工作得很好。
相关讨论
- 你设备的安卓版本是多少??你找到解决办法了吗??
- 导致问题的是实际的蓝牙设备,而不是 android 或 BluetoothDevice 类;)