- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是我的 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/
我正在使用 Google map v2,有时 getLastKnownLocation() 返回 NULL。有没有其他方法可以达到相同的效果但稳定性更高?感谢您的帮助 最佳答案 首先,如果用户关闭了您
我想每 5 分钟从我的 Android 应用向服务器发送一次最新和最准确的位置。 在此question我被建议创建一个将注册到 LocationUpdates 的 alarmManager。 为什么这
我正在尝试检索设备的位置,但由于某种原因没有接收到该位置。有人可以检查我的代码并让我知道代码中的错误是什么吗?谢谢。 主 Activity public class MainActivity ext
来自 android 文档 LocationManager.getLastKnownLocation(): Returns a Location indicating the data from th
我正在尝试通过最佳提供商从 gps/netwrok 获取位置,但它总是返回相同的位置,而且我可以在谷歌地图上看到我正确位置的标志。谁能告诉我我做错了什么? 我的 Activity 是: public
在我的应用程序中,我有一个 AlarmManager 设置为每隔一段时间运行一个 IntentService 以向我的服务器发送您的当前位置的 WebService 调用 启动警报后,我还会启动一个
所以我正在使用 getLastKnownLocation 方法获取设备的位置位置,但除非有 GPS 定位,否则它会返回 null。有没有办法延迟 getLastKnownLocation 的执行,直到
我通过执行来设置我的位置管理器 LocationManager lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 然
我正在开发处理 Google Maps Api 的 Android 应用程序,我尝试使用 mMap.getLastKnownLocation(); 获取我的当前位置,然后获取 latitude 和 l
固定位置有问题。我使用 getLastKnownLocation(LocationManager.NETWORK_PROVIDER);但总是返回 null,我已经在你的 AndroidManifest
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我正在开发一个 Android 应用程序,其中当前和精确的位置是关键。检测到 GPS 定位后,它会转到下一个 Activity 。 问题是我在户外测试它,发现有时它只是使用以前修复的位置。 所以我问的
getBestKnownLocation Returns a Location indicating the data from the last known location fix obtaine
我正在使用 myLocation = mLocationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 在我的应用程序启动时检索
这似乎是一个普遍的问题,但我真的不明白为什么会发生这种情况,即使我阅读了大量类似的问题。 我正在模拟器设备上玩一个基本的位置类,我设置了所有内容 - 权限(FINE 和 COARSE),我在 DDMS
我正在为 GPS 提供商调用 getLastKnownLocation,它返回空值。文档说如果未启用提供程序可能会发生这种情况,但我知道它是。如果最后一个已知位置不存在,提供者是否可以返回 null?
我刚刚开始工作,但是当我关闭 Wifi 以查看是否可以使用 GPS 获得更准确的位置时,它现在给我带来 NullPointer 错误,我看不到为什么。 下面的代码首先被调用; public void
我已经阅读了一些关于此的问题,但我并没有找到我需要的答案。 所以,情况是我设置了我的 map ,我想获取我当前的 gps 位置。我检查了我的变量不是 NULL,但我的结果来自: getLastKnow
我正在创建一个仅在用户单击按钮时检查位置的应用程序。 这是我的代码,当我调用 getLastKnownLocation 时,即使在调用 requestLocationUpdates 之后,它也会返回
我尝试通过 GPS 获取当前位置并显示它。 首先,我初始化 LocationManager,因此我总是使用方法 getLocation() public class MainActivity exte
我是一名优秀的程序员,十分优秀!