2011-08-26 48 views
3

我知道這個問題已被問到,但我不能得到它的工作。onLocationChanged()沒有被調用

此代碼繼續到請求位置部分。我知道現在的設置是不好的選擇,但我只是想獲得結果,我現在不關心手機電池。我可以在Eclipse調試器中看到,

"libloc" - "Latitude: XXXXX"  
"libloc" - "Longitude: XXXX"  
"libloc" - "Accuracy: 27000" 

這意味着GPS正在工作。但我無法獲得實際位置,因爲LocationListener中沒有任何方法正在觸發。

LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 

    Location loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
    if(loc==null){  
     String provider = null; 

     if (lm.isProviderEnabled(LocationManager.GPS_PROVIDER)) { 
      provider = LocationManager.GPS_PROVIDER; 
     } else { 
      Toast.makeText(this, "GPS not available", 3000).show(); 
      if(lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) { 
       provider = LocationManager.NETWORK_PROVIDER; 
      } else { 
       Toast.makeText(this, "Provider Not available", 3000).show(); 
      } 
     } 

     if(provider != null) { 
      lm.requestLocationUpdates(provider, 0, 0, locationListener); 
     } 

    } else { 
     Latitude = loc.getLatitude(); 
     Longitude = loc.getLongitude(); 
    } 

這是我的Location Listener對象,它聲明在最上面的代碼下面。 沒有這些方法正在被調用(因此Log.d函數,所以我可以添加斷點,但沒有任何內容在此偵聽器中被調用)。

double Latitude   = 0.0; 
double Longitude  = 0.0; 

LocationListener locationListener = new LocationListener(){ 

    @Override 
    public void onLocationChanged(Location location) { 
     Latitude = location.getLatitude(); 
     Longitude = location.getLongitude(); 
    } 

    @Override 
    public void onProviderDisabled(String provider) { Log.d("GPS", "HEY THERE"); } 
    @Override 
    public void onProviderEnabled(String provider) { Log.d("GPS", "HEY THERE"); }  
    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     Log.d("GPS", "HEY THERE"); 

    } 

}; 

其他信息,從評論:

這是不是這樣的。 loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);總是 返回null。 - Overload119 50分鐘前

當您逐句通過IF 語句中的其餘代碼時會發生什麼? - 傑克44分鐘前

我終於到了這一行:lm.requestLocationUpdates(provider,0, 0,locationListener);然後在調試器控制檯消息中,我可以看到 經度,經度,精度顯示 - 並重復顯示, ,所以我假設GPS已被激活,並獲取了 位置。問題是locationListener沒有觸發它的任何 方法。 - Overload119 41分鐘前

而我看着鏈接,我的代碼是一樣的。 - Overload119 41分鐘 以前供應商在這一點上的價值是什麼? - 傑克30分鐘 前

提供商的價值是「GPS」 - Overload119 15分鐘前
能 設置在onLocationChanged一些斷點,看看當/如果它是 射擊?如果您已經完成此操作,則在運行您的應用程序 之後,可能需要幾秒鐘後才能將偵聽器註冊爲 火災。移動你的手機並等待。在某些時候,它應該反覆發射。 - 傑克12分鐘前

imm.io/8vXb下面是截圖 - 調試器顯示,GPS在工作(注意,此事件 彈出,一遍又一遍)。我在onLocationChanged()上已經有 的中斷點 - 即使在等待 延長的時間段後,它也永遠達不到它。它返回的經度/緯度始終是 。 - Overload119 39秒前編輯

我也試過撥打電話 lm.getLastKnownLocation(LocationManager。GPS_PROVIDER);通過按鈕 並在控制檯消息顯示接收到經緯度 後單擊它。 - 雖然該方法返回的位置爲null。 - Overload119 0秒前編輯

+0

解決了嗎?同樣的問題!似乎我們都回收了相同的代碼片段,這是不正確的。 –

+0

@ Overload119,omg!我在這裏得到了同樣的情況。那麼解決方案如何? – gumuruh

回答

3

我猜你Location loc總是被getLastKnownLocation()設定,因此您的if語句從不計算true。您是否調試過,看看會發生什麼:

Location loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
    if(loc==null){ ... } 

從我的理解你應該只使用getLastKnownLocation()得到一個初始位置,然後註冊你的聽衆進行跟蹤。

Here是一個很好的鏈接,包含所有您需要的信息。

+0

事實並非如此。 loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);總是返回null。 – Overload119

+0

當您在IF語句中逐步完成其餘代碼時會發生什麼? – Jack

+0

我最終得到這一行:lm.requestLocationUpdates(provider,0,0,locationListener);然後在調試器控制檯消息中,我可以看到經度,經度,準確度顯示 - 並重復顯示,因此我假定GPS已被激活並獲取位置。問題是locationListener沒有觸發它的任何方法。 – Overload119

相關問題