2015-12-13 80 views
0

我正在尝试使用下面的代码获取位置,但它返回0.0作为经度和纬度的值。Android位置返回0.0

public void getLocation(){ 
    LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    LocationListener locationListener = new MyLocationListener(); 

    lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0,0, locationListener); 
    if(isLocationEnabled(MainActivity.this, lm)){ 
     Location location = new Location(LocationManager.NETWORK_PROVIDER); 
     Log.d("LOCATION",String.valueOf(location.getLatitude())); 
     getWeather(location.getLongitude(), location.getLatitude()); 

    }else{ 
     buildDialog(MainActivity.this); 
    } 
} 

然而,当我在MyLocationListener类打印位置,它返回正确的价值观。我究竟做错了什么?

public class MyLocationListener implements LocationListener{ 


    @Override 
    public void onLocationChanged(Location location) { 
     double latitude = location.getLatitude(); 
     double longitude = location.getLongitude(); 

     System.out.println("LATITUDE AND LONGITUDE" + latitude + " " + longitude); 
    } 
} 

回答

0

您在onLocationChanged方法,因为提供者创建并发送看到正确的价值观。如果创建位置对象,然后使用,这样

Location location = new Location(LocationManager.NETWORK_PROVIDER); 
Log.d("LOCATION",String.valueOf(location.getLatitude())); 
getWeather(location.getLongitude(), location.getLatitude()); 

经度和纬度将是0.0,因为它只是创建并没有设定值,检查此Location

对不起,我没有看到你的第二个后,你可以像下面这样做

mLocationManager.requestSingleUpdate("network", new LocationListener() { 
@Override public void onLocationChanged(Location location) { 

    // DO YOUR REST OF WORK HERE 
} 
@Override public void onStatusChanged(String provider, int status, Bundle extras) {} 
@Override public void onProviderEnabled(String provider) {} 
@Override public void onProviderDisabled(String provider) {}}, Looper.myLooper()); 

你一定要确保有新的位置数据,所以在这里直接使用位置。如果调用getLastKnownLocation方法而不激活onLocationChanged方法,则会提供旧数据或空数据。

0

我需要从LocationManager实例化我的Location,而不是传递提供者,如下面的行中所示。

if(isLocationEnabled(MainActivity.this, lm)){ 
       Location location = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
       Log.d("LOCATION",String.valueOf(location.getLatitude())); 
       getWeather(location.getLatitude(), location.getLongitude());