2010-08-27 270 views
0

我正在開發一個需要了解用戶位置的位置感知應用程序。 問題是應用程序似乎不能正常工作。Android GPS位置監聽器

正確地說,我的意思是說,每次我必須首先打開一個應用程序(例如有氧運動訓練器)才能獲得GPS信號,然後運行我的程序,否則通知欄上的GPS圖標會閃爍,如閃爍該設備嘗試獲取GPS信號,過了一段時間後,它停止並且沒有位置返回!

這真的很奇怪,因爲它不應該停止,是否有一個區間,android提供GPS獲取信號?

關於文檔,我還沒有找到任何有關的。

我的代碼如下:

lm.isProviderEnabled(LocationManager.GPS_PROVIDER); 
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 60000, 10, locationListenerGps); 
LocationListener locationListenerGps = new LocationListener() { 
    public void onLocationChanged(Location location) { 
     locationResult.gotLocation(location); 
     Log.e("##################","MyLocation got GPS location accuracy: 
     "+location.getAccuracy()+" Altitute: "+location.getAltitude()+" log: 
     "+location.getLongitude()+" lat: "+location.getLatitude()); 
    } 
    public void onProviderDisabled(String provider) {} 
    public void onProviderEnabled(String provider) {} 
    public void onStatusChanged(String provider, int status, Bundle extras) {} 
    }; 

這應該打開GPS提供商和註冊監聽器名爲locationListenerGps將由外景經理被稱爲每隔1分鐘或右10米?

爲什麼我必須首先打開cardioTrainer以獲取GPS信號?

+0

您是否擁有ACCESS_FINE_LOCATION權限? – EboMike 2010-08-27 17:35:19

+0

是的,如果我沒有拋出異常,我擁有所有需要的權限。這是否可能是由於喚醒鎖定問題或與位置管理器無關的其他內容引起的? – maxsap 2010-08-27 19:45:28

+0

你是如何初始化你的lm變量的? – 2010-08-27 23:05:13

回答

0

嘗試在偵聽器中放置以下調試代碼,以查看您的位置提供程序何時啓用或禁用。這會告訴你什麼時候你的提供者改變了狀態,並且可能會告訴你當你的應用運行時發生了什麼。

@Override 
public void onStatusChanged(String provider, int status, Bundle extras) { 
    switch (status) { 
    case LocationProvider.TEMPORARILY_UNAVAILABLE: 
     Toast.makeText(mCtx, "Your location is temporarily unavailable", 
       Toast.LENGTH_SHORT).show(); 
     break; 
    case LocationProvider.OUT_OF_SERVICE: 
     Toast.makeText(mCtx, "Your location is now unavailable", Toast.LENGTH_SHORT) 
       .show(); 
     break; 
    case LocationProvider.AVAILABLE: 
     Toast.makeText(mCtx, "Your location is now available", Toast.LENGTH_SHORT) 
       .show(); 
    } 
} 
+0

謝謝我會嘗試併發布結果。 – maxsap 2010-08-28 07:23:07