【问题标题】:Android using inputStream to read from BluetoothAndroid 使用 inputStream 从蓝牙读取
【发布时间】:2011-08-12 18:48:29
【问题描述】:

我编写了一个程序,它通过 SPP 不断地从蓝牙读取数据并将流中的内容打印到编辑文本框。我有以下线程:

myTimer = new Timer();
myTimer.schedule(new TimerTask(){
   @Override
   public void run(){
     TimerMethod();
   }
},0,1000);

private void TimerMethod(){this.runOnUiThread(startReading);}


private Runnable startReading = new Runnable(){

    public void run(){
        EditText _txtArea = (EditText) findViewById(R.id._txtArea);
    try{
        inStream = btSocket.getInputStream();
    }catch (IOException e3) {
        _txtArea.append("inStream establishment Failed!");

    }

现在消息的传入可以是任意大小,我想继续阅读,直到没有任何内容可供阅读。我尝试了一个实现,我做了这样的事情:

   byte[] msgIn = new byte[15];
   inStream.read(msgIn, 0, 15);
            int len = msgIn.length;
            for (int i=0; i<len; i++){
                out = new Character ((char) msgIn[i]).toString();       
                _txtArea.append(out);

但这将读取限制为 15 个字节,并且代码似乎不是很有效。如果有人想知道为什么我有以下行 = new Character ((char) msg​​In[i]).toString();这是因为传入的数据是 ASCII 我正在将其转换为字符。同样在读取完所有内容后使用此方法没有其他内容可读取程序挂起。有谁知道我可以继续阅读直到所有数据都被读取的方法?

【问题讨论】:

    标签: android multithreading stream


    【解决方案1】:

    我想通了,对于那些感兴趣的人来说,这是因为应该在读取之前关闭流,以便 inputStream.read() 在发送所有数据后能够达到 -1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-16
      • 1970-01-01
      • 1970-01-01
      • 2012-08-30
      • 2016-03-30
      • 1970-01-01
      • 2021-08-07
      相关资源
      最近更新 更多