首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Android蓝牙日志填满logcat

Android蓝牙日志填满logcat
EN

Stack Overflow用户
提问于 2011-03-09 03:52:18
回答 5查看 6.7K关注 0票数 14

我使用蓝牙聊天示例作为起点,实现了从我的手机到嵌入式设备的BT连接。我能够成功地连接到设备,但是一旦建立了连接,logcat就会被大量的日志溢出。当我第一次使用BT聊天应用程序手机对手机时,我没有看到这种类型的日志。

这是一遍又一遍重复的。它基本上使logcat不可用。到目前为止,我还没有找到一种方法来配置日志记录,或者为什么它会记录这么多日志。任何真知灼见都将不胜感激。

代码语言:javascript
运行
复制
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
EN

Stack Overflow用户

发布于 2014-10-15 00:48:51

我只是偶然发现了这一点:3年后,这种木头堵塞仍然存在-至少在我的三星GT-I8190 (4.1.2)上。

罪魁祸首是mmInputStream.available()

解决这个问题的一种方法是不使用available()方法。而不是:

代码语言:javascript
运行
复制
int bytesAvailable = mmInputStream.available();

if(bytesAvailable > 0)
{...

你可以使用类似下面的代码来避免日志阻塞……

代码语言:javascript
运行
复制
int i = -1;
while((i=mmInputStream.read())!=-1)
{                           
  char c=(char)i;

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

下面的代码也适用于有这个讨厌的bug的手机。不过,它可能应该修改一下,因为它只是一个快速而粗糙的修复:

代码语言:javascript
运行
复制
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();
    }
票数 2
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5237513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档