2012-03-19 75 views
2

我目前使用計時器來確定位置監聽器是否超時?問題在於GPS仍然在運行。我不知道爲什麼,當locationlistener超時或更優雅的方法時,是否有一種方法可以重寫?LocationListener timeout

+0

什麼是「位置監聽器超時」?當他們沒有在合理的時間內被打電話? – zapl 2012-03-19 10:05:27

+0

是的......當它無法確定一個實際的位置 – opc0de 2012-03-19 10:06:33

+0

你的問題不是很清楚。講清楚 。 – 2012-03-19 10:31:26

回答

1

考慮將GPS狀態監聽器添加到您的位置管理器。當GPS啓動,停止,接收第一個定位或衛星狀態(可見衛星數量,至少需要4個修正)時,通知狀態監聽器。

監聽器可以是這樣的:

class GpsStatusListener implements GpsStatus.Listener { 

    @Override 
    public void onGpsStatusChanged(final int event) { 
     switch(event) { 
         // ... 
      break; 
     case GpsStatus.GPS_EVENT_STOPPED: 
         // ... 
      break; 
     case GpsStatus.GPS_EVENT_FIRST_FIX: 
         // ... 
      break; 
     case GpsStatus.GPS_EVENT_SATELLITE_STATUS: 
         // ... 
      break; 
     } 
    } 
} 

據如下補充:

lm.addGpsStatusListener(new GpsStatusListener()); 

你並不需要刪除位置監聽器GPS狀態發生變化時。

您也可以通過重寫下列方法之一得到位置管理附加信息:

public void onStatusChanged(final String provider, final int status, final Bundle extras) { 
    switch(status) { 
    case LocationProvider.AVAILABLE: 
       // ... 
     break; 
    case LocationProvider.OUT_OF_SERVICE: 
       // ... 
     break; 
    case LocationProvider.TEMPORARILY_UNAVAILABLE: 
       // ... 
     break; 
    } 
} 

@Override 
public void onProviderEnabled(final String provider) { 
       // ... 
} 

@Override 
public void onProviderDisabled(final String provider) { 
       // ... 
} 
+0

當我得到這種情況:案件LocationProvider.AVAILABLE,案件LocationProvider.OUT_OF_SERVICE,案件LocationProvider.TEMPORARILY_UNAVAILABLE,因爲我相信,可能會幫助我與我的問題:http://stackoverflow.com/questions/15747543/locationlistener-of- network-provider-is-enabled-but-onlocationchanged-is-never – 2013-05-24 14:33:45

+0

I記錄每個案例,並在LocationListener(NETWORK_PROVIDER)的onStatusChanged中生成每個案例的報告,但它沒有發生 – 2013-05-24 14:45:05

+0

這取決於您的硬件。如果GPS不能再看到衛星(例如進入建築物時),我有時會得到暫時不可用的信號。我從來沒有看到過服務信號。 – Stefan 2013-05-28 08:20:54

0

當超時發生或您已獲得當前位置時,您應該刪除位置偵聽器。