2012-08-22 58 views
3

我正在尋找一個位置感知的通知最先進的技術。Android的位置感知的通知

我的第一個嘗試是使用LocationManager的addProximityAlert,但它需要ACCESS_FINE_LOCATION(COARSE_LOCATION給我一個SecurityException),並保持GPS始終打開並處於活動狀態(至少在Jelly Bean上),這會很快耗盡電池電量。當屏幕處於睡眠狀態時(addProximityAlert),似乎每4分鐘只檢查一次檢查。

我正在考慮與PASSIVE_PROVIDER合作來收集其他應用程序的位置信息,並可能每隔一段時間使用一次服務來請求COARSE_LOCATION(例如每隔4分鐘關閉一次屏幕,更頻繁地屏幕打開並且設備已插入)。

的要求是當用戶去附近的一些地方,應用程序將觸發一個通知。

任何已經實施或有任何建議,以有效和電池效率的方式來實現這一點?

回答

4

我建立了這樣的應用程序(因此我的問題在辦公時間Q & A關於如何測量LocationManager的功耗),同時它的工作非常好。 我最初打算使用內置的接近警報,但奮鬥在相同的問題,因爲你並認爲它不夠靈活。

取而代之的是,我建立了一個服務,它使用LocationProvider使用NETWORK_PROVIDER每五分鐘輪詢一次位置,計算到期望位置的距離,如果在鄰近範圍內,則觸發通知。 在有很多無線網絡的城市,這給我一個(報告)50米的準確度。

我也用PASSIVE_PROVIDER從其他應用的位置請求中受益。

如果我在附近一所希望的位置和報道的準確性是太粗,以決定我是否在指定鄰近範圍內與否,我使用的是單一的GPS位置請求作爲備份。如果NETWORK_PROVIDER超時,我也使用單個GPS位置請求。爲了在我使用地鐵時不讓GPS提供商耗盡電池電量,它也會出現指數退避超時。

雖然我連接到Wifi網絡,但我認爲我沒有移動,並在此期間禁用位置提供程序。

我所做的最後一項更改是,如果我能確定我無法在15分鐘內將其保存到任何保存的位置,則使用NETWORK_PROVIDER的15分鐘(「非精確重複」)計時器一個5分鐘的intervall沒有意義)。這有助於節省電力。

我在考慮使用更長的時間間隔來節省更多的電量,但在這裏找到一種啓發式方法並不容易,它決定了我能否在那段時間內到達我保存的位置之一,因爲我不能總是假定相同的行駛速度(走路,乘火車或汽車旅行)。 但是,由於我無法測量由我的應用程序導致的LocationManager功耗,所以我不知道如何在每天的情況下評估功耗。

我不介意內置的API是否能提供所有的邏輯,但我認爲它沒有,所以我建立了自己的。

希望這有助於你。

+0

看來,我將不得不做大量的代碼。我跳只使用addProximityAlert :)感謝所有的信息,會嘗試模仿你的一些應用程序的行爲...... – luciofm

+0

@machtnix你能提供一些示例代碼來完成目標 –

+0

@droidhot你可能想看看在本文http://android-developers.blogspot.de/2011/06/deep-dive-into-location.html與一些代碼片段的前奏。 – machtnix

0

我使用下面庫來做到這一點。 https://code.google.com/p/little-fluffy-location-library/

這是很容易使用,但它並沒有給太多的靈活性。例如,您不能即時更改更新頻率。但是它的來源是可用的,你可以將其轉換。

+0

這是一個很好的起點......我真的實際做我自己的lib任何瀏覽,但我使用它作爲參考... – luciofm

+0

謝謝。我認爲圖書館幾乎已經準備好了。它是開源的。如果你不喜歡某些東西,你可以改變。因爲其他答案所說的很多代碼都是不必要的我想 – tasomaniac