从SDK的'getLastKnownLocation'方法中获取null值。

5

我有一个与位置API相关的问题。

我尝试了以下代码:

LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location loc = getLastKnownLocation(LocationManager.GPS_PROVIDER);

当调用getLastKnownLocation()时,loc始终为null

出了什么问题?

6个回答

6

除了在您的AndroidManifest.xml文件中设置权限外,您是否已经注册了位置监听器?

LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
Location loc = getLastKnownLocation(LocationManager.GPS_PROVIDER);
lm.requestLocationUpdates(LocationManager.GPS, 100, 1, locationListener); 

然后有一个方法,此处为locationListener,可以完成您的任务。
private final LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
    latitude = location.getLatitude();
    longitude = location.getLongitude();
}

3
如果您在模拟器中运行代码,则任何获取GPS位置的调用都将返回null,直到您明确更新位置(通过EclipseADB)。

2

我和你一样遇到了同样的问题,我总是收到一个空的位置对象。但最终它以一种简单的方式得到了解决。您必须拥有有效的GPS位置,因此,如果GPS未启用并且您没有足够的信号,则位置对象将始终为空。


1
你在AndroidManifest.xml中设置了权限吗?您需要这些权限才能使用应用程序访问用户的位置:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

1
实际上,MOCK_LOCATION 不是必需的——它只用于开发/测试。 - Ridcully

0

这里有一些你可以使用的东西:

LocationManager lm = (LocationManager) mContext.getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
String bestProvider = lm.getBestProvider(criteria, false);
Location loc = lm.getLastKnownLocation(bestProvider);

last_lat = loc.getLatitude();
last_lng = loc.getLongitude();

0
你需要像这样获取 LocationManager 的实例:
第一个实例:
   LocationManager lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);

错误:

Location loc = getLastKnownLocation(LocationManager.GPS_PROVIDER);

正确:

Location loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接