2017-10-18 159 views
1

我對Android的項目,我必須得到用戶的當前位置信息,每2分鐘,我們正在使用的代碼工作是獲取GPS定位消耗電池

try { 
       DpGPSEnabled = DpLocationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 
       DpNetworkEnabled = DpLocationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); 
       if (DpIsGpsProvider && DpGPSEnabled) { 
        DpLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,DpMIN_TIME_BW_UPDATES,DpMIN_DISTANCE_CHANGE_FOR_UPDATES,DpLocationListener); 
       } else if (!DpGPSEnabled) { 
        DpLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER,DpMIN_TIME_BW_UPDATES,DpMIN_DISTANCE_CHANGE_FOR_UPDATES,DpLocationListener); 
        DpGenUtil.setLocationPostion(DpLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER)); 
       } 
       if (DpGPSEnabled && DpNetworkEnabled) { 
        DgProvider = "GPS+Network"; 
       } else if (DpNetworkEnabled) { 
        DgProvider = "Network"; 
       } else if (DpGPSEnabled) { 
        DgProvider = "GPS"; 
       } else { 
        DgProvider = "Not Selected"; 
       } 

      } catch (Exception ex) { 

      } 

其中DpMIN_TIME_BW_UPDATES = 1000 * 60 * 2; 2分鐘 和DpMIN_DISTANCE_CHANGE_FOR_UPDATES = 200;以米爲單位

問題是我們能夠正確獲取位置,但電池開始消耗得更快,有沒有其他方法可以獲得位置,也不會消耗太多電量。

回答

1

Gps比wifi耗電量更多。您可以使用request location updatesCriteria與LocationManager結合使用,或者如果沒有Google Play服務,則可以使用FusedLocationProvider API。 FLP使用Wifi,Gps和卡爾曼濾波器進行定位。您可以測試LocationManager和FLP的準確性和電池消耗。我從LocationManager Gps和FLP獲得4米精度(更好的設備可能會獲得更好的結果)。 LocationManager wifi具有較低的準確性,並且沒有速度,高度信息。

+0

好的我會檢查一下,謝謝你的回覆 – sunilkarkala

+1

我寫了一個測試類,用Wifi,GP和FLP測試LocationManager。我還檢查了衛星計數的GpsStatusListener狀態,以及衛星的信號功率和固定和信噪比,以測試位置apis。您也可以這樣做,並將電池消耗與不同數量的可用衛星進行比較。 – Thracian

+0

我看了一下那個API,現在它已被 FusedLocationProviderClient棄用,但功能保持不變,我會研究這一點。 – sunilkarkala