位置并不总是出现

时间:2012-08-22 16:20:42

标签: java android geolocation

我试图通过LocationManager.NETWORK_PROVIDER获取用户的位置,但它总是返回一个空字符串。有时我只能获得有效数据。有没有办法让这个方法重新迭代,直到它给我一个位置?我认为位置会很快到来,并且不需要这种方法。我已经尝试重新调用它,直到它没有显示空白字符串,但什么都没有出现。

这是我调用的方法

   public String getLocation(Locale locale, Context context, boolean city, boolean postal, boolean state_prov) throws IOException{
       LocationManager locMan = (LocationManager)this.getSystemService(Context.LOCATION_SERVICE);
       LocationListener locList = new MyLocList();
       Geocoder gC = new Geocoder(context,locale);
       Location gpsLocation = locMan.getLastKnownLocation(locMan.GPS_PROVIDER);
       locMan.requestLocationUpdates(locMan.NETWORK_PROVIDER, 500, 200, locList);
       Location networkLocation = locMan.getLastKnownLocation(locMan.NETWORK_PROVIDER);
       if (city)
           return (gC.getFromLocation(networkLocation.getLatitude(), networkLocation.getLongitude(), 1).get(0).getSubAdminArea());
       else if (postal)
           return (gC.getFromLocation(networkLocation.getLatitude(), networkLocation.getLongitude(), 1).get(0).getPostalCode());
       else if (state_prov)
           return (gC.getFromLocation(networkLocation.getLatitude(), networkLocation.getLongitude(), 1).get(0).getAdminArea());
       else
           return "Nothing";
    }

我经常要求提供城市或邮政编码,但大部分时间它都是空的。使用

    Location gpsLocation = locMan.getLastKnownLocation(locMan.GPS_PROVIDER);

导致NullPointer,所以我使用的是NETWORK_PROVIDER

我已设置这些权限:

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>

这就是我所说的

    String data = getLocation(Locale.getDefault(),getBaseContext(),true,false,false);

我继续得到一个空字符串作为结果。

之前我问了一个关于没有收到这座城市的问题,但是现在看来似乎没有数据出现,如果是这样的话,它就不会一直可用。

1 个答案:

答案 0 :(得分:1)

在您的代码中,您要求“最后的已知位置”,而不是“当前位置”。其他一些应用程序之前询问了位置,并且您获得的结果与该应用程序相同。如果在启动您的应用程序之前没有请求位置,“最后的已知位置”将为空。

正确的方法是注册监听器并等待位置更新到达。然后将结果存储为“最后已知位置”。

这个答案可以帮到你:What is the simplest and most robust way to get the user's current location in Android?

编辑:澄清一下,这里是上面链接中提到的MyLocation类的正确用法。您不能立即拥有该位置,而是将您的代码放在回调方法中,并在位置数据可用时调用它。

LocationResult locationResult = new LocationResult(){
    @Override
    public void gotLocation(Location location){
        //Got the location!
        //Here goes your code
        //This method will be called when location data arrive
    }
};
MyLocation myLocation = new MyLocation();
myLocation.getLocation(this, locationResult);