Ho scaricato il campione Android di app di chat Bluetooth per inviare il testo tra due dispositivi Android tramite Bluetooth.Impossibile inviare dati di testo tra due dispositivi bluetooth in Android?
Ho installato ed eseguito questa app in due dispositivi Android.
ho affrontato molti problemi in quel codice
- scoperta Servizio fallito eccezione - fisso
- java.io.IOException: software ha causato l'interruzione della connessione - fisso
- java.io.IOException : Connessione ripristinata da Peer - Colpito su questo
1. Azzerato la scoperta di servizio non è riuscita eccezione:
Per il rilevamento dei servizi fallito eccezione, in chat servizio Bluetooth, ho controllato la versione SDK e per la versione SDK, che è maggiore di Ginger Bread,
I ho usato la classe Method per invocare la connessione socket RfCOMM e la mia prima eccezione è risolta in questo approccio.
Codice di eccezione
tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
eccezione fisso codice
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. AzzeratoIOException: software ha causato l'interruzione della connessione di controllo
ho fatto se l'InputStream è disponibile
Codice di eccezione
bytes = mmInStream.read(buffer);
Codice di eccezione fisso
if (mmInStream.available() > 0) {
// Read from the InputStream
bytes = mmInStream.read(buffer);
Ora il mio problema è quando provo a trasmettere i dati tra i dispositivi collegati, getta il seguente messaggio di errore "Connessione ripristinata dal peer" durante la scrittura di flusso di output
Codice di eccezione:
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","");
}
}
== Aggiornamento ==
Anche se dimostra che entrambi i dispositivi sono collegati, il metodo restituisce accettare sicuro
**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)
Grazie per la risposta, si prega di consultare il mio aggiornamento in questione, grazie –
Quali sono '' LEN_SIZE' e LEN_TYPE' qui, @ gtRfnkN? – ericn
poiché si invia sempre un flusso di byte, non è possibile sapere dove inizia il messaggio e dove finisce. per questo, è necessario estendere il messaggio con il proprio protocollo, compresa la lunghezza del messaggio che si desidera inviare. quindi ho aggiunto 4 byte all'inizio del messaggio per la lunghezza (LEN_SIZE). quando ricevo un messaggio, prima leggo questo valore e poi aspetterò che tutti i dati vengano letti. (vedi while (cPos
gtRfnkN