2015-12-22 79 views
0

是否有一個庫可以爲具有特定MAC的藍牙低功耗設備執行後臺掃描?我知道altbeacon這樣做,但似乎只適用於信標類型的BLE設備 - 而不是其他類型。或者有沒有一種方法可以爲此使用altbeacon?我只是想檢測某個設備是否處於打開狀態,並且範圍內 - 據我所知,這應該可能類似於信標 - 我只是沒有篩選廣告中的某些數據 - 僅針對mac。我可以實現這一點,但不想重新發明輪子連續掃描BLE-MAC

回答

0

我沒有爲你準備的圖書館,但我最近做了類似的工作,而且這很容易實現。

首先我做一個btAdapter.startLeScan(mLeScanCallback); 它運行在一個循環,並在回調我可以過濾MAC地址

private BluetoothAdapter.LeScanCallback mLeScanCallback = 
     new BluetoothAdapter.LeScanCallback() { 

      @Override 
      public void onLeScan(final BluetoothDevice device, final int rssi, final byte[] scanRecord) { 
       runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         if (device.getAddress().equals("your mac address")){ 
          //do your stuff 
         } 
        } 
       }); 
      } 
     }; 
+0

是的 - 但問題是更多的是在後臺做,而不消耗太多精力 – ligi

2

爲了給你一個強大的解決方案,它消耗少量的能量,並在所有操作系統版本的作品與他們不同的掃描API將成爲數百行復雜的代碼。我知道,因爲我已經完成了,請參閱https://github.com/iDevicesInc/SweetBlue/blob/master/src/com/idevicesinc/sweetblue/P_Task_Scan.java,瞭解您必須處理的一些細節。

所以,如果你在驗證的概念階段,只是想要的東西快,嘗試在你的Activity類以下使用SweetBlue

// Wake lock might not be needed for your application, up to you. 
BleManager.get(this).pushWakeLock(); 

BleManager.get(this).setConfig(new BleManagerConfig() 
{{ 
     scanMode = BleScanMode.LOW_POWER; 
}}); 

BleManager.get(this).startPeriodicScan(Interval.FIVE_SECS, Interval.FIVE_SECS, new ScanFilter() 
{ 
    @Override public Please onEvent(ScanEvent e) 
    { 
     return Please.acknowledgeIf(e.macAddress().equals("DE:CA:FF:C0:FF:EE")); 
    } 
}); 

這會給你掃描大約五秒鐘,五幾秒鐘後重復,直到您致電stopPeriodicScan()

+0

感謝 - upvoted,但尚未接受希望更好的方式(lib) – ligi