2010-11-09 157 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