Подтвердить что ты не робот

Регистрация Bluetooth Bluetooth с регистрацией

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

Вот что повторяется снова и снова. Это в основном делает 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
4b9b3361

Ответ 1

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

Ответ 2

После игры с моим Arduino Board + Bluetooth-адаптером я попытался реализовать Bluetooth-код из MATT BELL 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: Временные метки на самом деле являются фиксированной версией. Неиспользование исправления приведет к спаму, каждый 5 мс эффектно блокирует весь мой журнал

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

Мое текущее исправление добавляет следующий код в конце цикла while, что приводит к сокращению спама.

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

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

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

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

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

Ответ 4

Я просто наткнулся на это: через 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();
    }

Ответ 5

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