Регистрация 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
Ответы
Ответ 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 имеется огромное количество данных, блокирующих все обычные журналы...
Ответ 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, используя приоритет "отладки" в поле со списком рядом с значком гибкого диска.