我当前的位置总是返回 null.我怎样才能解决这个问题? [英] My current location always returns null. How can I fix this?
问题描述
我正在尝试为一个 android 项目查找我当前的位置.加载应用程序时,我的当前位置始终为空.我已经在清单等中设置了权限.当我找到当前位置时,我打算使用坐标来查找到地图上其他位置的距离.我的代码片段如下.为什么我总是得到一个空值?
I am trying to find my current location for an android project. When the application is loaded my current location is always null. I have set up the permissions in the manifest etc. When I find the current location I intend to use the coordinates to find distances to other locations on the map. My code snippet is below. Why do I always get a null value?
locMan = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria crit = new Criteria();
towers = locMan.getBestProvider(crit, false);
location = locMan.getLastKnownLocation(towers);
if (location != null) {
System.out.println("Location is not null!");
lat = (int) (location.getLatitude() *1E6);
longi = (int) (location.getLongitude() * 1E6);
GeoPoint ourLocation = new GeoPoint(lati, longi);
OverlayItem overlayItem = new OverlayItem(ourLocation, "1st String",
"2nd String");
CustomPinpoint custom = new CustomPinpoint(d, MainMap.this);
custom.insertPinpoint(overlayItem);
overlayList.add(custom);
overlayList.clear();
} else {
System.out.println("Location is null! " + towers);
Toast.makeText(MainMap.this, "Couldn't get provider",Toast.LENGTH_SHORT)
.show();
}
推荐答案
getLastKnownLocation()
使用其他应用程序先前找到的位置.如果没有应用程序这样做,则 getLastKnownLocation()
将返回 null.
getLastKnownLocation()
uses the location(s) previously found by other applications. if no application has done this, then getLastKnownLocation()
will return null.
您可以对代码做一件事,以更好地获得最后一个已知位置 - 迭代所有启用的提供者,而不仅仅是最好的提供者.例如,
One thing you can do to your code to have a better chance at getting as last known location- iterate over all of the enabled providers, not just the best provider. For example,
private Location getLastKnownLocation() {
List<String> providers = mLocationManager.getProviders(true);
Location bestLocation = null;
for (String provider : providers) {
Location l = mLocationManager.getLastKnownLocation(provider);
ALog.d("last known location, provider: %s, location: %s", provider,
l);
if (l == null) {
continue;
}
if (bestLocation == null
|| l.getAccuracy() < bestLocation.getAccuracy()) {
ALog.d("found best last known location: %s", l);
bestLocation = l;
}
}
if (bestLocation == null) {
return null;
}
return bestLocation;
}
如果您的应用在没有位置的情况下无法处理,并且如果没有最后的已知位置,您将需要监听位置更新.你可以看看这个类的例子,
If your app can't deal without having a location, and if there's no last known location, you will need to listen for location updates. You can take a look at this class for an example,
https://github.com/farble1670/autobright/blob/master/src/org/jtb/autobright/EventService.java
参见方法 onStartCommand()
,它检查网络提供程序是否已启用.如果不是,则使用最后一个已知位置.如果启用,它会注册以接收位置更新.
See the method onStartCommand()
, where it checks if the network provider is enabled. If not, it uses last known location. If it is enabled, it registers to receive location updates.
这篇关于我当前的位置总是返回 null.我怎样才能解决这个问题?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!