2011-03-08 12 views
12

Ho utilizzato l'esempio di chat Bluetooth come punto di partenza per implementare una connessione BT dal mio telefono a un dispositivo incorporato. Sono in grado di connettermi al dispositivo con successo, ma una volta stabilita la connessione, il logcat viene sovraccaricato da una quantità enorme di registrazione. Non ho visto questo tipo di registrazione quando ho fatto il telefono per le app di chat BT al telefono.Registrazione Bluetooth Android che riempie logcat

Ecco cosa viene ripetuto all'infinito. In pratica rende il logcat inutilizzabile. Finora non ho trovato un modo per configurare il logging o perché sta registrando così tanto. Ogni approfondimento è apprezzato.

03-08 14:29:04.941: DEBUG/BluetoothSocket.cpp(11422): availableNative 
03-08 14:29:04.957: DEBUG/BluetoothSocket(11422): available 
03-08 14:29:04.957: DEBUG/BluetoothSocket.cpp(11422): availableNative 
03-08 14:29:04.971: DEBUG/BluetoothSocket(11422): available 
03-08 14:29:04.976: DEBUG/BluetoothSocket.cpp(11422): availableNative 
03-08 14:29:04.989: DEBUG/BluetoothSocket(11422): available 
03-08 14:29:04.991: DEBUG/BluetoothSocket.cpp(11422): availableNative 
03-08 14:29:05.016: DEBUG/BluetoothSocket(11422): available 
03-08 14:29:05.016: DEBUG/BluetoothSocket.cpp(11422): availableNative 
03-08 14:29:05.034: DEBUG/BluetoothSocket(11422): available 
03-08 14:29:05.036: DEBUG/BluetoothSocket.cpp(11422): availableNative 
03-08 14:29:05.050: DEBUG/BluetoothSocket(11422): available 
03-08 14:29:05.051: DEBUG/BluetoothSocket.cpp(11422): availableNative 
03-08 14:29:05.066: DEBUG/BluetoothSocket(11422): available 
03-08 14:29:05.066: DEBUG/BluetoothSocket.cpp(11422): availableNative 
03-08 14:29:05.081: DEBUG/BluetoothSocket(11422): available 
03-08 14:29:05.081: DEBUG/BluetoothSocket.cpp(11422): availableNative 
03-08 14:29:05.086: DEBUG/(2419): jw_if_rfcomm_cl_cback: jw_if_rfcomm_cl_cback event=BTA_JV_RFCOMM_READ_EVT 
03-08 14:29:05.086: DEBUG/(2419): jv_forward_data_to_jni: BTA_JV_RFCOMM_DATA_IND_EVT bta hdl 2 
03-08 14:29:05.086: DEBUG/(2419): bts_log_tstamps_us: [update stats] ts 1263504, bta hdl 2, diff 01263504, tx_q 1 (1), rx_q 0 (0) 
03-08 14:29:05.086: DEBUG/BLZ20_WRAPPER(11422): blz20_wrp_poll: transp poll : (fd 41) returned r_ev [POLLIN ] (0x1) 
03-08 14:29:05.086: DEBUG/BLZ20_WRAPPER(11422): blz20_wrp_poll: return 1 
03-08 14:29:05.086: DEBUG/BLZ20_WRAPPER(11422): blz20_wrp_read: read 122 bytes out of 1024 on fd 41 
03-08 14:29:05.101: DEBUG/BluetoothSocket(11422): read 
03-08 14:29:05.101: DEBUG/BluetoothSocket.cpp(11422): readNative 
03-08 14:29:05.101: DEBUG/ASOCKWRP(11422): asocket_read 
03-08 14:29:05.106: INFO/BLZ20_WRAPPER(11422): blz20_wrp_poll: nfds 2, timeout -1 ms 
03-08 14:29:05.117: DEBUG/BluetoothSocket(11422): available 
03-08 14:29:05.121: DEBUG/BluetoothSocket.cpp(11422): availableNative 

risposta

-1

In DDMS è possibile filtrare le cose utilizzando le informazioni di debug, errore, di avvertimento, pulsanti e si può anche creare un filtro speciale per mostrare solo le cose che vi interessano. Non credo che ci sia alcuna impostazioni bluetooth per disattivare la registrazione che è possibile utilizzare.

+1

temevo che sarebbe stata la risposta. Grazie – bursk

+0

Follow-up - Penso che potrei essere in esecuzione anche in un problema telefonico. Non ottengo la registrazione eccessiva durante l'esecuzione del codice su un telefono G1. Sia il mio Galaxy S che il G1 eseguono l'aggiornamento 2.1 di Android 1. – bursk

+5

Ho visto lo stesso problema. È limitato ai dispositivi Samsung. Devono disattivare il debug dello spam prima della spedizione. – user48956

3

Questo deve essere un errore, e una cosa seria:

  • sia Logcat mostra solo questa stampa di debug a volte - anche se il mio codice viene sempre attraverso di esso

  • o il chip Bluetooth corre sciolto volte ...(più probabilmente).

semplicemente ruotando il livello di log per eseguire il debug da verbose non sarà cambia il fatto v'è una quantità enorme di dati trasferiti al Logcat, bloccando tutti i registri normali ...

4

Dopo aver giocato con la mia Scheda Arduino + adattatore Bluetooth Ho provato a implementare il codice Bluetooth da MATT BELL'S BLOG. Il problema è il seguente codice:

//final Handler handler = new Handler(); 
workerThread = new Thread(new Runnable() 
{ 
    public void run() 
    { 
     while(!Thread.currentThread().isInterrupted() && !stopWorker) 
     { 
      try { 
       int bytesAvailable = mmInputStream.available(); 
       if(bytesAvailable > 0) 
       { 
        //Log.d(TAG,"bytesAvailable: "+bytesAvailable + " readBufferPosition: "+readBufferPosition); 
        byte[] packetBytes = new byte[bytesAvailable]; 
        mmInputStream.read(packetBytes); 

        for(int i=0;i<bytesAvailable;i++) 
        { 
         byte delimiter = 0x0A;  // /n bzw. LF 
         byte b = packetBytes[i]; 
         if(b == delimiter) 
         { 
          byte[] encodedBytes = new byte[readBufferPosition]; 
          System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length); 
          final String data = new String(encodedBytes, "US-ASCII"); 
          //final String data = new String(readBuffer); 
          readBufferPosition = 0; 

          Log.d(TAG,""+data); 

//           //The variable data now contains our full command 
//           handler.post(new Runnable() 
//           { 
//            public void run() 
//            { 
//             //myLabel.setText(data); 
//             Log.d(TAG,""+data); 
//            } 
//           }); 
         } 
         else 
         { 
          readBuffer[readBufferPosition++] = b; 
         } 
        } 
       } 
      } catch (Exception e) { 
       Log.d(TAG,"Exeption 2: "+e.getMessage()); 
       stopWorker = true; 
      } 
     } 
    } 
}); 
workerThread.start(); 

telefonando ai seguenti risultati funzionali nel enorme Spam in Logcat

int bytesAvailable = mmInputStream.available(); 

LogCat:

PS: I timestamp sono di fatto della versione fissa. Non usando la correzione sarà si tradurrà in uno spam ogni 5ms effectivly bloccando tutta la mia Log

03-17 18:43:06.615: VERBOSE/BluetoothSocket.cpp(8871): availableNative 
03-17 18:43:06.715: VERBOSE/BluetoothSocket.cpp(8871): availableNative 
03-17 18:43:06.820: VERBOSE/BluetoothSocket.cpp(8871): availableNative 
03-17 18:43:06.920: VERBOSE/BluetoothSocket.cpp(8871): availableNative 
03-17 18:43:07.020: VERBOSE/BluetoothSocket.cpp(8871): availableNative 
03-17 18:43:07.120: VERBOSE/BluetoothSocket.cpp(8871): availableNative 
03-17 18:43:07.220: VERBOSE/BluetoothSocket.cpp(8871): availableNative 
03-17 18:43:07.320: VERBOSE/BluetoothSocket.cpp(8871): availableNative 
03-17 18:43:07.420: VERBOSE/BluetoothSocket.cpp(8871): availableNative 
03-17 18:43:07.520: VERBOSE/BluetoothSocket.cpp(8871): availableNative 
03-17 18:43:07.620: VERBOSE/BluetoothSocket.cpp(8871): availableNative 
03-17 18:43:07.725: VERBOSE/BluetoothSocket.cpp(8871): availableNative 
03-17 18:43:07.825: VERBOSE/BluetoothSocket.cpp(8871): availableNative 
03-17 18:43:07.925: VERBOSE/BluetoothSocket.cpp(8871): availableNative 
03-17 18:43:08.025: VERBOSE/BluetoothSocket.cpp(8871): availableNative 

mio fix corrente sta aggiungendo il seguente codice alla fine del mentre ciclo con conseguente riduzione dello spam.

try { 
Thread.sleep(100); 
} catch (Exception e) { 
Log.d(TAG,"Exception Thread.sleep()"); 
} 

Spero che questo possa aiutare alcune persone con problemi simili.

Edit: Attualmente ho dovuto ridurre la sleep-timer a 10 ms bam .. SPAM

03-18 15:50:18.470: VERBOSE/BluetoothSocket.cpp(3482): availableNative 
03-18 15:50:18.470: VERBOSE/BluetoothSocket.cpp(3482): availableNative 
03-18 15:50:18.470: VERBOSE/BluetoothSocket.cpp(3482): availableNative 
03-18 15:50:18.470: VERBOSE/BluetoothSocket.cpp(3482): availableNative 
03-18 15:50:18.470: VERBOSE/BluetoothSocket.cpp(3482): availableNative 
03-18 15:50:18.470: VERBOSE/BluetoothSocket.cpp(3482): availableNative 
03-18 15:50:18.470: VERBOSE/BluetoothSocket.cpp(3482): availableNative 
03-18 15:50:18.470: VERBOSE/BluetoothSocket.cpp(3482): availableNative 
03-18 15:50:18.470: VERBOSE/BluetoothSocket.cpp(3482): availableNative 
03-18 15:50:18.470: VERBOSE/BluetoothSocket.cpp(3482): availableNative 
+0

Hai trovato il modo di venire a conoscenza di questo? Sto troppo lottando per il problema esatto. I metodi di lettura – skygeek

1

"avaliableNative" ha una priorità Verbose. Per eliminare il messaggio (e anche tutti i messaggi dettagliati) usa un parametro "*: D" come ultimo parametro logcat. Una cosa simile può essere ottenuta in Eclipse usando la priorità "debug" nella casella combinata accanto all'icona del dischetto.

2

Mi sono appena imbattuto in questo: dopo 3 anni questo log ostruzione è ancora presente - almeno sul mio Samsung GT-I8190 (4.1.2).

Il colpevole è mmInputStream.available()

Un modo per aggirare questo è non usarlo available() metodo. Invece di:

int bytesAvailable = mmInputStream.available(); 

if(bytesAvailable > 0) 
{... 

Si potrebbe usare qualcosa come il codice sottostante per awoid intasamento del registro ...

int i = -1; 
while((i=mmInputStream.read())!=-1) 
{       
    char c=(char)i; 

    // you can do your buffering here... 
    Log.i("readBT","have char: "+c); 
} 

Questo codice di seguito funziona anche sui telefoni con questo brutto bug. Si dovrebbe probabilmente essere revisione anche se dal momento che è solo un rapido & sporca fix:

void beginListenForData() 
    { 
     final Handler handler = new Handler(); 
     final byte delimiter = 10; //This is the ASCII code for a newline character 

     stopWorker = false; 
     readBufferPosition = 0; 
     readBuffer = new byte[1024]; 
     workerThread = new Thread(new Runnable() 
     { 
      public void run() 
      {     
       while(!Thread.currentThread().isInterrupted() && !stopWorker) 
       { 
        try 
        { 
         int i = -1; 
         while((i=mmInputStream.read())!=-1) 
         { 
          byte b=(byte)i; 

          Log.i("readBT","have byte: " + b); 

          if ((readBufferPosition >= 1023) || (b == delimiter)) 
          { 
           byte[] encodedBytes = new byte[readBufferPosition]; 
           System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length); 
           final String data = new String(encodedBytes, "UTF-8"); 
           readBufferPosition = 0; 

           handler.post(new Runnable() 
           { 
            public void run() 
            { 
             myLabel.setText(data); 
            } 
           });        
          } 
          else 
          { 
           readBuffer[readBufferPosition++] = b; 
          }       
         }      
        } 
        catch (IOException ex) 
        { 
         stopWorker = true; 
        } 
       } 
      } 
     }); 

     workerThread.start(); 
    } 
+1

hanno anche un problema di (doppio) registro: 'D/BluetoothSocket: read in: [email protected] len: 1 D/BluetoothSocket: read out: [email protected] ret: 1' – Florian