Android Bluetooth логирование заполняется logcat - PullRequest
13 голосов
/ 08 марта 2011

Я использовал пример чата Bluetooth в качестве отправной точки для реализации BT-соединения от моего телефона к встроенному устройству. Я могу успешно подключиться к устройству, но как только соединение установлено, logcat переполняется огромным количеством журналов. Я не видел этот тип журналирования при первом использовании приложения BT chat phone на телефон.

Вот то, что повторяется снова и снова. Это в основном делает logcat непригодным для использования. До сих пор я не нашел способ настроить ведение журнала или почему он так много. Любые идеи будут оценены.

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

Ответы [ 5 ]

4 голосов
/ 17 марта 2013

После игры с моим Arduino Board + Bluetooth-адаптером я попытался реализовать Bluetooth-код из MATT BELL'S BLOG . Проблема заключается в следующем коде:

//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();

Вызов следующей функции приводит к огромному спаму в logCat

int bytesAvailable = mmInputStream.available();

LogCat:

PS: временные метки фактически являются фиксированной версией. Неиспользование этого исправления приведет к спаму каждые 5ms , эффективно блокирующему весь журнал

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

Мое текущее исправление - добавление следующего кода в конце цикла , тогда как приводит к уменьшению количества спама.

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

Надеюсь, это поможет некоторым людям с похожими проблемами.

Редактировать: В настоящее время мне пришлось уменьшить таймер сна до 10 мсек. СПАМ

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
3 голосов
/ 17 августа 2012

Это должна быть серьезная ошибка:

  • либо LogCat только иногда показывает эту отладочную печать - хотя мой код всегда с ней сталкивается

  • или чип Bluetooth иногда ослабевает ... (более вероятно).

Простое переключение уровня журнала для отладки из подробного не изменит тот факт, что огромное количество данных передается в Logcat, блокируя все обычные журналы ...

2 голосов
/ 14 октября 2014

Я только что наткнулся на это: через 3 года это засорение журнала все еще присутствует - по крайней мере, на моем Samsung GT-I8190 (4.1.2).

Преступник mmInputStream.available()

Один из способов обойти это - не использовать его available() метод.Вместо:

int bytesAvailable = mmInputStream.available();

if(bytesAvailable > 0)
{...

Вы можете использовать что-то вроде кода ниже, чтобы избежать засорения журнала ...

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

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

Этот код ниже также работает на телефонах с этой неприятной ошибкой.Вероятно, его следует пересмотреть, поскольку это быстрое и грязное исправление:

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 голос
/ 04 марта 2014

«avaliableNative» имеет подробный приоритет. Чтобы избавиться от сообщения (а также всех подробных сообщений), используйте параметр «*: D» в качестве последнего параметра logcat. Подобного можно добиться в Eclipse, используя приоритет «отладка» в поле со списком рядом со значком дискеты.

0 голосов
/ 08 марта 2011

В DDMS вы можете отфильтровать вещи, используя кнопки отладки, информации, ошибок, предупреждений, а также вы можете создать специальный фильтр, чтобы показывать только те вещи, которые вам интересны. Не думайте, что есть какая-либо настройка Bluetooth для поворота от регистрации, что вы могли бы использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...