2012-08-24 77 views
0

在下面的代碼中,總是在設備上返回null,即使我得到的是Provide = internet。它工作正常,但知道它返回一個空值。我正在使用Galaxy Tab版本2.2。getLastKnownLocation()在設備上返回始終爲空

public void find_Location(Context con) { 
    Log.d("Find Location", "in find_location"); 
    this.con=con; 
    String location_context = Context.LOCATION_SERVICE; 
    LocationManager locationManager = 
    (LocationManager)con.getSystemService(location_context); 
    List<String> providers = locationManager.getProviders(true); 
    for (String provider : providers) { 
    locationManager.requestLocationUpdates(provider, 1000, 0,new LocationListener() { 
     public void onLocationChanged(Location location) {} 
     public void onProviderDisabled(String provider){} 
     public void onProviderEnabled(String provider){} 
     public void onStatusChanged(String provider, int status,Bundle extras){} 
    }); 
    Location location = locationManager.getLastKnownLocation(provider); 
    if (location != null) { 
     lat = location.getLatitude(); 
     lng = location.getLongitude(); 
     Geocoder geocoder = new Geocoder(AdvanceSearch.this, 
     Locale.getDefault());List<Address> addresses; 
     try { 
     addresses = geocoder.getFromLocation(lat,lng,100); 
     countryname=addresses.get(0).getCountryName(); 
     eexit e = new eexit(); 
     statename= addresses.get(0).getAdminArea(); 
     cityname=addresses.get(0).getLocality(); 
     } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     } 
    } 
    } 
} 

在此先感謝您的幫助。

+0

你需要時間去修復。檢查何時調用onLocationChanged。 – hsz

+1

http://stackoverflow.com/questions/1916568/getlastknownlocation-getting-null-on-sdk?rq=1 檢查這1出。這與你的問題完全相同。 –

+0

我等待arrount 4分鐘,但onLocationChanged從來沒有打電話 – sara

回答

2

我會先專注於此行。你的requestLocationUpdates有一個minDistance設置爲0.

玩弄minDistance,我認爲這是你的問題所在。

locationManager.requestLocationUpdates(provider, 1000, 15, new LocationListener() { 

編輯:

另外我想補充一個LogLocationListener方法。這樣做對我有很大的幫助。

這是我早期LocationListener腳本的例子:

public LocationListener jLocListener = new LocationListener() { 
    //class findMe implements LocationListener { 
    public void onLocationChanged(Location location) { 
     try { 
      lat = location.getLatitude(); 
      lon = location.getLongitude(); 
     } catch (Exception e) { 
      Log.e("onLocationChanged", "FAILED: " + e.getMessage()); 
     } 
    } 
    public void onProviderDisabled(String provider) { 
     Log.i("LocationListener", "onProviderDisabled"); 
    } 
    public void onProviderEnabled(String provider) { 
     Log.i("LocationListener", "onProviderEnabled"); 
    } 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     Log.i("LocationListener", "onStatusChanged"); 
    } 
+0

我是這個消息geo/MapActivity(5867):無法獲得連接工廠客戶端 – sara

+0

你在模擬器上試試這個嗎?如果是這樣,請確保仿真器在硬件部分選擇了GPS支持。你也有清單中的<使用權限android:name =「android.permission.ACCESS_COURSE_LOCATION」/>'和'<使用權限android:name =「android.permission.ACCESS_FINE_LOCATION」/>' – jnthnjns

+0

我在設備上檢查它,通過此代碼獲取當前位置需要很長時間,這會影響它無法正常工作,並且會降低我的應用程序的速度,是否有任何修復方法? – sara

相關問題