locationManager.getLastKnownLocation() 返回 null
Posted
技术标签:
【中文标题】locationManager.getLastKnownLocation() 返回 null【英文标题】:locationManager.getLastKnownLocation() return null 【发布时间】:2014-07-17 09:35:30 【问题描述】:我不明白为什么 locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
返回位置 null。我给予了所有许可,但它的 reutning null
。
if (isGPSEnabled)
if (location == null)
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER,
MIN_TIME_BW_UPDATES,
MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("GPS", "GPS Enabled");
if (locationManager != null)
location = locationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null)
latitude = location.getLatitude();
longitude = location.getLongitude();
【问题讨论】:
你在设备上检查它吗? 当您在办公室或建筑物时,GPS 将无法工作。因此您还需要在这种情况下使用 NETWORK_PROVIDER 进行检查 @Biraj 我给了 NETWORK_PROVIDER 它仍然给出 null 直到某个时间之后。在继续之前如何确保不为空值 【参考方案1】:我遇到了同样的问题。这是因为我的设备没有存储最后一个已知位置。我只是去谷歌地图并用 GPS 精确定位我的位置,然后为 getLastKnownLocation() 返回一个值
【讨论】:
你说得对,建议看这个答案***.com/questions/10524381/… 这为我(应用程序开发人员)解决了这个问题,但是如果不告诉我的最终用户去 Google 地图进行 GPS 修复,我该如何做到这一点?【参考方案2】:您可以像这样请求位置更新
mLocationManager.requestLocationUpdates(myProvider, 0, 0, locationListener);
然后在locationListener.onLocationChanged
的第一个回调中设置您的坐标。只是不要忘记致电mLocationManager.removeUpdates(locationListener)
【讨论】:
所以你的答案是根本不使用getLastKnownLocation()
?为什么?【参考方案3】:
根据documentation,如果设备不知道最后一个已知位置,则返回null。 GPS可能无法定位您。无论如何,这需要大约一分钟或更长时间。所以尽量走到外面,在晴朗的天空下,远离高楼,等到 GPS 可以找到你。
【讨论】:
【参考方案4】:我用这个方法来获取位置我认为它会帮助你
private void startReceivingLocationUpdates()
if (mLocationManager == null)
mLocationManager = (android.location.LocationManager)
mContext.getSystemService(Context.LOCATION_SERVICE);
if (mLocationManager != null)
try
mLocationManager.requestLocationUpdates(
android.location.LocationManager.NETWORK_PROVIDER,
1000,
0F,
mLocationListeners[1]);
catch (SecurityException ex)
Log.i(TAG, "fail to request location update, ignore", ex);
catch (IllegalArgumentException ex)
Log.d(TAG, "provider does not exist " + ex.getMessage());
try
mLocationManager.requestLocationUpdates(
android.location.LocationManager.GPS_PROVIDER,
1000,
0F,
mLocationListeners[0]);
if (mListener != null) mListener.showGpsOnScreenIndicator(false);
catch (SecurityException ex)
Log.i(TAG, "fail to request location update, ignore", ex);
catch (IllegalArgumentException ex)
Log.d(TAG, "provider does not exist " + ex.getMessage());
Log.d(TAG, "startReceivingLocationUpdates");
【讨论】:
【参考方案5】:当您使用 GPS 作为提供商时,它会在 1 到 2 分钟内给出您的结果,因此您必须在获取位置停止时进行有争议的检查,并且网络提供商会在您请求时立即为您提供位置。因此,您不会在 GPS 提供商中获得即时位置纬度。
GPS 仅在第一次时需要 1 到 2 次,然后它会为您提供您随时待命的位置...
【讨论】:
以上是关于locationManager.getLastKnownLocation() 返回 null的主要内容,如果未能解决你的问题,请参考以下文章