簡體   English   中英

使用OnStatusChanged從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。

Google Play上的GPSTest

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM