2014-02-23 46 views
-1

我有一個片段:的Android onLocationChanged停止被稱爲

public class myMap extends Fragment implements LocationListener 
{ 
    // do all the usual stuff 
@Override 
public void onResume() 
{ 
    super.onResume(); 

    if(mIsGPSEnabled) 
    { 
     mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 10, this); 
    } 
    // and of course a bit more of code I am skipping 
} 
@Override 
public void onLocationChanged(Location location) {  
    Toast.makeText(getActivity(), "location changed " + location.getLatitude() + " " + location.getLongitude(), Toast.LENGTH_LONG).show(); 

} 

我注意到以下行爲:

  1. 的onResume總是得到最後已知的位置工作正常。
  2. 在應用我的通知欄上的開始我看到GPS這個小圖標是
  3. 一段時間後,我得到了onLocationChanged稱爲第一次(到目前爲止一切都很好)
  4. 現在很少GPS圖標從通知欄中消失,onLocationChanged不再被調用。該應用程序是在任何時候都於地面
  5. 我從來沒有註銷(現在)我的位置變化監聽
  6. 我把我的應用程序的底色,並開始例如osmand(導航軟件),而該軟件運行時我看到我在onLocationChanged上爲每一次更新敬酒,按照應該的方式工作。

任何想法?

+0

你確定它沒有請求更新你有最少的請求時間設置爲1分鐘,所以你不會得到一分鐘的更新至少 – JRowan

+0

是的,我相信,等待15分鐘在城鎮散步... – AndyAndroid

+0

你測試在HTC Hero上? – Smile2Life

回答

0

檢查

mLocationManager!= NULL

如果爲空,你可以requesteLocationUpdates否則避免調用請求

+0

我在調試器中檢查到它不是null。如果它是空的,那麼即使第一次更新也不起作用,但這是有效的。 – AndyAndroid

+0

確定但是多次調用requesteUpdates是錯誤的。你應該打一次電話。 –

0

使用日誌和使用free logcat app看它這是確保您的位置未更新:

Toast.makeText(getApplicationContext(), "location changed " + location.getLatitude() + " " + location.getLongitude(), Toast.LENGTH_LONG).show(); 

因爲我不認爲你的默認主屏幕是一個活動!這就是爲什麼吐司會出現在osmand和你的應用程序,而不是在主屏幕上。

,所以我認爲你是在一個著名的Android Location API的問題,我之前花了30多天知道有很多人民有同樣的問題!比你能感覺更好,如果你看看這裏https://code.google.com/p/android/issues/detail?id=57707

該問題沒有限制沒有算法沒有特殊情況:>>獲得第一個位置,停一會,完美工作兩天,並切換工作停止一個星期...... !!

我認爲你必須購買新的測試手機!