![](/img/trans.png)
[英]Not getting user location using GPS_PROVIDER / NETWORK_PROVIDER
[英]Using OnStatusChanged to switch to NETWORK_PROVIDER from GPS_PROVIDER?
我正在開發需要精確GPS定位的應用程序。 如果GPS_PROVIDER
已啟用但不可用(例如在隧道中),我希望我的應用切換到NETWORK_PROVIDER
。
我可以使用locationListener的OnStatusChanged OUT_OF_SERVICE
來確定是否無法進行GPS修復嗎?
像這樣:
public void onStatusChanged(String provider, int status, Bundle extras) {
//0 = OUT_OF_SERVICE
if (status == 0) {
//try requesting updates using NETWORK_PROVIDER
lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, ll);
//TOAST MESSAGE: GPS UNAVAILABLE ATTEMPTING FIX WITH NETWORK
...
我在正確使用OnStatusChanged
嗎? 是否有一種簡單且更好的方法來首先嘗試GPS修復,如果不可用,則切換到NETWORK?
添加lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, ll);
它將開始使用網絡獲取位置,但是一旦您從隧道中出來,它將開始從網絡和GPS獲取。 使用location.getProvider()
您應該能夠區分出它是gps還是網絡。
如果在應用程序運行時GPS狀態沒有改變(例如,如果您始終在室內而沒有GPS定位),則某些設備將不會觸發OnStatusChanged()
方法。
如果您在應用程序運行時更改GPS狀態(例如,您在內部並且無法獲得修復,然后在OnStatusChanged()
走走可以得到修復,反之亦然),則應在所有設備上觸發OnStatusChanged()
方法。
如果您希望使用功能全面的開源應用作為示例,請嘗試使用Android團隊的Mike Lockwood的GPSTest。
有關即使設備無法修復也不斷更新的GPS的更多詳細信息,您可能需要注冊GPSStatusListener。
在您的Activity中,聲明類變量:
private LocationManager mService;
private GpsStatus mStatus;
...並添加處理GPSStatus更改的方法:
public void onGpsStatusChanged(int event) {
mStatus = mService.getGpsStatus(mStatus);
switch (event) {
case GpsStatus.GPS_EVENT_STARTED:
// Do Something with mStatus info
break;
case GpsStatus.GPS_EVENT_STOPPED:
// Do Something with mStatus info
break;
case GpsStatus.GPS_EVENT_FIRST_FIX:
// Do Something with mStatus info
break;
case GpsStatus.GPS_EVENT_SATELLITE_STATUS:
// Do Something with mStatus info
break;
}
}
然后在您的Activity的OnCreate()中注冊GPSStatusListener:
mService = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
mService.addGpsStatusListener(this);
在GPSTest應用程序中,基於此代碼 ,每次GPSStatusListener更新都會在屏幕上顯示當前可用衛星的列表。
這樣,即使您的手機無法獲得GPS定位(因此也可能不會觸發LocationListener
OnStatusChanged
),您也會收到有關系統GPS狀態的活動更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.