2010-11-09 160 views
0

我试图冲动我的蓝牙加密狗,看它是否是范围。 我的Android每秒钟都会向加密狗发送一个字符,然后用一个字符进行响应。如果没有响应,或者字符错误,那么它应该断定没有连接。安卓到外部蓝牙轮询

我可以从Android发送到加密狗(连接到MCU),并且加密狗能够响应。 所有我需要的是一个简单的方法来读取每个字符(当收到)来比较它。我试图在一个单独的线程中使它在自己的循环中运行。

这是我的代码,但我想我可能会关闭,所以如果你能给我一个指针!

void readFromInputStream() 
{ 
    Thread readFromInputStream = new Thread() 
    { 
     public void run() 
     { 

      String streng = ""; 

      try 
      { 
       //just 100 times for now 
       for(int i = 0; i < 100; i++) 
       { 

        BufferedReader in = new BufferedReader(new InputStreamReader(inStream)); 

        if(in.read() == 'z') 
        { 
         //set variable or something 
        } 
        else 
        { 
         //do something else 
        } 

        writeTerminal('z'); 
        sleep(1000); 

       } 

      } 
      catch(Exception e) 
      { 
       Log.e("Threading", e.toString()); 
      } 
      finally 
     { 
       finish(); 
     } 
     } 
    }; 
    readFromInputStream.start(); 
    } 
} 

但它似乎每次我尝试和评估它冻结的东西!

+0

对不起,我无法提供Q手头,但您可能希望在Android上使用轮询时有点小心 - 您会杀死电池,特别是每1秒轮询一次。 – Basic 2010-11-09 09:25:11

+0

其实我宁愿避开轮询部分,但我希望断开蓝牙适配器(不是android蓝牙)在尝试写入时会抛出异常,但它似乎不起作用,所以我想出来了用投票解决方案......感叹! – Chizpa 2010-11-09 15:57:40

+0

尝试执行设备发现/查询或远程名称请求,以检查设备是否在范围内... – 2010-11-09 19:48:30

回答

0

只需尝试连接到设备,如果连接经过您知道它存在,并立即断开连接。

+0

但我不会然后必须切换连接?到目前为止,我的解决方案是,我发现我可以在异步线程中“垃圾”连接。如果在另一端没有设备,那么最终(在50个字节左右之后)'管道被破坏'(某种outputStreamBuffer溢出)......所以这是我现在的解决方案。 – Chizpa 2010-11-11 06:56:36

+0

但是为了再次重新连接,我需要禁用/启用蓝牙, – Chizpa 2010-11-11 06:57:26

+0

或者你认为我可以保持“恢复蓝牙”(即使连接),然后在那里捕获异常?...如果异常则关闭连接? – Chizpa 2010-11-11 17:22:37