Bluetooth を使用して 2 つの Android デバイス間でテキストを送信するために、Bluetooth チャット アプリの Android サンプルをダウンロードしました。
このアプリを 2 つの Android デバイスにインストールして実行しました。
私はそのコードで多くの問題に直面しました
- サービス検出失敗の例外 -修正済み
- java.io.IOException: ソフトウェアが原因で接続が中止された -修正済み
- java.io.IOException: ピアによって接続がリセットされました -これが発生しました
1. Service discovery failed 例外をクリアしました:
サービス検出に失敗した例外については、Bluetooth チャット サービスで、sdk バージョンを確認しました。sdk バージョンが Ginger Bread よりも大きい場合は、
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);
今私の問題は、接続されたデバイス間でデータを送信しようとすると、出力ストリームへの書き込み中に次のエラーメッセージ「ピアによる接続リセット」がスローされることです
例外コード:
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)