我正在开发一个应用程序,我想在互联网上检查一些信息,但我只想在设备移动 X 米时才执行此操作。 例如,如果用户移动了300米,则调用服务器,如果没有移动,则不执行任何操作。但我认为我不能启动一个服务来一直监听 GPS 坐标并计算距离,因为电池会很快耗尽。
我的问题是:Android 有什么方法可以启动服务或发送广播警告我 GPS 坐标已更改 X 米?
目前我有一个 AlarmManager,每 30 分钟获取一次 GPS 坐标,但我需要更准确。
最佳答案
使用LocationManager.requestLocationUpdates();
方法;您可以指定发送更新的最短时间(以秒为单位),以及更新前的最小米数。
应该看起来像这样:
//in milliseconds
private final int MINIMUM_TIME_BETWEEN_UPDATES = 5000;//in meters
private final int MINIMUM_DISTANCE_BETWEEN_UPDATES = 1;LocationManager lManager =(LocationManager)this.getSystemService(Context.LOCATION_SERVICE); LocationListener = listener = new LocationListener() { public void onStatusChanged(String provider, int status, Bundle extras) { } public void onProviderEnabled(String provider) { } public void onProviderDisabled(String provider) { } public void onLocationChanged(Location location) { } }; lManager.requestLocationUpdates(bestProvider, MINIMUM_TIME_BETWEEN_UPDATES, MINIMUM_DISTANCE_BETWEEN_UPDATES, listener);
这会创建一个LocationManager
使用指定的位置提供商(GPS 或网络)、指定的秒数和指定的米数。位置管理器将更新发送到“LocationListener”。每当收到更新时都会调用 onLocationChanged。 bestProvider 变量可以通过使用 LocationManager.getBestProvider() 找到;和 Criteria 类。
关于java - 了解设备是否移动并注册 GPS 坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13341068/