我已经下载了蓝牙聊天应用程序的 android 示例,以使用蓝牙在两个 android 设备之间发送文本。
我已经在两个安卓设备上安装并运行了这个应用程序。
我在该代码中遇到了很多问题
- 服务发现失败异常 -已修复
- java.io.IOException:软件导致连接中止 -已修复
- java.io.IOException:Peer 重置连接 -对此感到震惊
1.清除Service discovery failed异常:
对于服务发现失败异常,在蓝牙聊天服务中,我检查了 sdk 版本以及大于 Ginger Bread 的 sdk 版本,
我已经使用 Method 类来调用 RfCOMM 套接字连接,并且我的第一个异常在这种方法中得到了解决。
异常代码
tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
修复异常代码
try {
if (Build.VERSION.SDK_INT < 9) {
try {
tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e1) {
e1.printStackTrace();
}
} else {
Method m = null;
try {
m = device.getClass().getMethod("createRfcommSocket",
new Class[] { int.class });
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
try {
tmp = (BluetoothSocket) m.invoke(device, 1);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
} catch (Exception e) {
Log.e(TAG, "create() failed", e);
}
2.清除java.io.IOException:软件导致连接中止
我已经检查了 InputStream 是否可用
异常代码
bytes = mmInStream.read(buffer);
修复异常代码
if (mmInStream.available() > 0) {
// Read from the InputStream
bytes = mmInStream.read(buffer);
现在我的问题是当我尝试在连接的设备之间发送数据时,它会在写入输出流时抛出以下错误消息“Connection Reset By Peer”
异常代码:
public void write(byte[] buffer, int start, int end) {
mHandler.obtainMessage(BluetoothChat.MESSAGE_WRITE, -1, -1, buffer).sendToTarget();
if (mmOutStream !=null) {
try {
mmOutStream.write(buffer);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
else{
Log.e("OutputStream Null","");
}
}
== 更新 ==
即使显示两个设备都已连接,accept 方法返回失败
**06-19 10:30:23.625: D/BluetoothChatService(2630): connected
06-19 10:30:23.625: D/BluetoothChatService(2630): cancel Thread[AcceptThread,5,main]
06-19 10:30:23.625: V/BluetoothSocket.cpp(2630): abortNative
06-19 10:30:23.625: V/BluetoothSocket.cpp(2630): ...asocket_abort(50) complete
06-19 10:30:23.625: V/BluetoothSocket.cpp(2630): ...accept(50, RFCOMM) = -1 (errno 125)
06-19 10:30:23.632: E/BluetoothChatService(2630): accept() failed
06-19 10:30:23.632: E/BluetoothChatService(2630): java.io.IOException: Operation Canceled
06-19 10:30:23.632: E/BluetoothChatService(2630): at android.bluetooth.BluetoothSocket.acceptNative(Native Method)