gpt4 book ai didi

android - getLastKnownLocation 使用 GPS_PROVIDER 和 NETWORK_PROVIDER 返回 NULL

转载 作者:太空狗 更新时间:2023-10-29 13:59:42 25 4
gpt4 key购买 nike

这是我的 GPSTracker 构造函数类:

    public GPSTracker(Context context) {
this.mContext = context;
locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);

Location gpsLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
Location networkLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}

gpsLocation 和 networkLocation 始终为 NULL。

getLastKnowLocation 方法不返回任何位置...即使我确定在午餐 Activity 前几秒(并创建 GPSTracker 对象)设备有网络位置(我在检查网络位置后禁用了地理标记可用)

使用 Android Studio 在 Nexus 5 上测试

最佳答案

是的,getLastKnownLocation() 可能会返回 null。 documentation 表示:

Returns a Location indicating the data from the last known location fix obtained from the given provider.

This can be done without starting the provider. Note that this location could be out-of-date, for example if the device was turned off and moved to another location.

If the provider is currently disabled, null is returned.

Android 设备不会一直自动跟踪其位置。 “最后已知位置”仅在某些应用程序请求位置时可用。因此,您不应期望总是使用 getLastKnownLocation() 获取位置。即使它返回了一些东西,位置也可能不是最新的。 Location 对象有一个时间戳,您可以使用 getTime() 方法读取它,还有一个估计精度,您可以使用 getAccuracy() 读取它方法。这些可用于评估位置是否可用。

如果您收到空位置或一个非常旧的位置,您将需要请求一个新位置。基本选项只是请求单个位置更新或连续更新,您可以指定时间间隔。

无论哪种情况,您的类都需要实现 LocationListener 接口(interface):

public class GpsTracker implements LocationListener {

// ...other code goes here...

@Override
public void onLocationChanged(Location location) {

// Do something with 'location' here.

}
}

对于单个位置更新,您将调用 [LocationManager.requestSingleUpdate()]( http://developer.android.com/reference/android/location/LocationManager.html#requestSingleUpdate(java.lang.String , android.location.LocationListener, android.os.Looper)) 并且对于连续更新 [LocationManager.requestLocationUpdates()]( http://developer.android.com/reference/android/location/LocationManager.html#requestLocationUpdates(java.lang.String , long, float ,android.location.LocationListener))。在任何一种情况下,都会有一个小的(或不太小的)延迟,并且当位置可用时调用 LocationListener.onLocationChanged() 回调。

例如,您可以像这样从 GPS 提供商请求单个更新:

locationManager.requestSingleUpdate(LocationManager.GPS_PROVIDER, this, null);

对于来自 GPS 提供商的持续更新每 1 秒并且仅当位置改变至少 1 米时,您可以调用:

locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 1, this);

然后还有一些 requestSingleUpdate() 的更多变体,您可以在文档中看到,另一方面,Google Play 服务位置 API,但我们不去那里。您的问题是关于 getLastKnownLocation() 返回 null 的,Stack Overflow 提供了几个请求最新位置的不同方法的示例。

编辑:这是一个旧答案。基本思想仍然有效,但请查看 Android 文档以了解请求位置更新的现代方法。

关于android - getLastKnownLocation 使用 GPS_PROVIDER 和 NETWORK_PROVIDER 返回 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36747349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com