我试图通过 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);
结果我一直得到一个空字符串。
我之前问过一个关于收不到城市的问题,但现在似乎没有数据来,即使有,也不是始终可用。
最佳答案
在您的代码中,您要求的是“最后已知位置”,而不是“当前位置”。其他一些应用程序之前要求提供位置,您得到的结果与该应用程序相同。如果在启动应用程序之前没有请求位置,“最后已知位置”将为空。
正确的方法是注册监听器并等待位置更新到达。然后结果被存储为“最后已知位置”。
这个答案应该对您有帮助: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);
关于java - 位置并不总是出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12077377/