2015-10-20 79 views
6

我正在尋找使用Google的Nearby API來檢測信標(Eddystone)。目前唯一的當前做法似乎是Nearby.Messages.subscribe(),如here所述。附近的API,在背景中掃描信標的正確方法是什麼?

問題是,這似乎不適合在後臺連續掃描。我的應用程序需要在後臺監視信標,以便在可見的情況下執行對REST API的調用。基本上,我需要類似於Estimote SDK提供的beacon monitorning功能。

這可以通過附近的API來實現而不會消耗電池嗎?

回答

0

這似乎是唯一的方法來做你想做的是要麼不斷掃描,要麼使用設備和信標位置觸發掃描時,他們是接近。無論哪種方式,當您掃描或共享位置時,都會有電量耗盡。看起來像Estimote信標使用定位方法,這可能是節約電池方面更好的方法。

2

我意識到這個問題是關於如何使用Nearby API,但我不知道如何使用它來滿足您的要求。

如果您願意接受替代方案,免費開放源代碼Android Beacon Library已完全支持Eddystone信標。它的API是在iOS監視/測距信標API之後建模的,因此它將按照您的要求進行。

See here關於如何使用此庫來監視Eddystone信標。

0

您也可以在後臺訂閱,以接收Intent而不是MessageListener通知。後臺掃描是低功耗掃描,因此延遲時間可能非常長(甚至可以檢測到信標)。掃描是在屏幕開啓事件或其他應用程序請求時執行的。因此,您從其他應用程序掃描中收到結果。

您可以使用應用程序上下文而不是活動上下文來創建GoogleApiClient。即從廣播接收機對BOOT_COMPLETED廣播進行響應。

GoogleApiClient client = new GoogleApiClient.Builder(appContext) 
    .addApi(Nearby.MESSAGES_API, new MessagesOptions.Builder() 
     .setPermissions(NearbyPermissions.BLE) 
     .build()) 
    .build(); 
client.connect(); 

一旦客戶機被連接(ConnectionCallbacks的onConnected方法),則可以使用subscribe和的PendingIntent創建處理的意圖廣播接收器。

在廣播接收器中,您可以使用正在使用與前景掃描相同的MessageListener的Ne​​arby.Messages.handleIntent方法處理意圖。

這種方法的一個問題是訪問Nearby的權限。要允許用戶批准訪問「附近」,您需要UI。我的解決方案是等待後臺掃描,直到用戶第一次打開應用並接受權限。一旦被接受,您可以在後臺訂閱。

相關問題