2014-06-07 24 views
0

我正在構建一個應用程序,要求每5分鐘記錄一次位置座標。由於我定位的設備是三星設備,它通過本機Android位置庫從網絡提供商處獲得問題,因此我選擇使用Google Play服務中的融合位置服務。融合位置服務選擇精確度優先級的最佳策略?

顯然使用PRIORITY_HIGH_ACCURACY將是最好的,因爲它會使用所有的供應商,以獲得最佳的位置。問題是,這會耗盡電池電量。我想根據情況在PRIORITY_BALANCED_POWER_ACCURACYPRIORITY_HIGH_ACCURACY之間切換。

目前,我有這樣的時候有互聯網連接(通過ping一個特定網站證實),我用PRIORITY_BALANCED_POWER_ACCURACY。如果沒有,我使用PRIORITY_HIGH_ACCURACY。我想知道這是否是最好的方式,因爲可能會出現這樣的情況:用戶沒有連接到任何WIFI,但他們的WIFI已開啓並處於WIFI擁擠區域。我是否應該除了檢查連接性以外,如果檢查失敗,請檢查可用的WIFI接入點,如果我找到一些接入點,仍然使用PRIORITY_BALANCED_POWER_ACCURACY

+0

Huy,我很想聽聽你的「通過本地Android位置庫從網絡提供商獲取問題」。我有一個基於位置的應用程序,我們也遇到了三星手機的問題。然而,我們轉而融合,而且我們有時仍然看到它們。你遇到了什麼樣的問題?有一些資源可以指向某個地方嗎?輸入將非常感謝! – Mathias

回答

1

你爲什麼不運行它運行定期檢查應用程序的電池水平螺紋或意圖的服務。當電平低於某一閾值時,調用removeLocationUpdates(),並通過調用requestLocationUpdates()與「PRIORITY_BALANCED_POWER_ACCURACY」

另外一個LocationRequest對象重新註冊,你可以檢查,如果用戶是在Wi-Fi無線擁擠的區域使用WifiManager Class,您可以使用startScan()掃描wifi熱點,並在廣播接收器中註冊結果並根據結果進行更改。

我不認爲這是可能的,以確定用戶在室內。 gps信號通常在室內較弱,您可能可以使用GpsStatus類和getSatellites()方法來推斷一些關於此的知識。

+0

謝謝。我認爲這個策略將不得不做。 –

0

你的5分鐘要求有多靈活?我不確定這對您的應用程序是否可行,但您可能希望允許用戶在設置菜單中選擇自己的準確性。您可以提供低功耗選項和高精度選項,分別使用PRIORITY_BALANCED_POWER_ACCURACY和P RIORITY_HIGH_ACCURACY。另一個選項是提供一個滑塊,以便用戶可以設置位置更新之間的間隔時間,並在較短的時間間隔內使用PRIORITY_BALANCED_POWER_ACCURACY,在短時間間隔內使用PRIORITY_HIGH_ACCURACY

+0

5分鐘的要求是必須的。至於讓用戶決定,讓我們只是說我爲這個應用程序的用戶羣是沒有技術上的責任足以依靠做出正確的決定。我基本上希望能夠感覺它們是否在裏面,使用PRIORITY_BALANCED_POWER_ACCURACY(因爲它在室內沒有電池消耗的情況下具有相當好的精度),並且當它們在室外時,它使用PRIORITY_HIGH_ACCURACY來包括GPS提供商。是否有任何策略來感知設備是室內還是戶外? –