java - 了解设备是否移动并注册 GPS 坐标

标签 java android gps

我正在开发一个应用程序,我想在互联网上检查一些信息,但我只想在设备移动 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/

相关文章:

java - MySQL 连接器类路径

android - 通过适配器在 fragment 之间传递数据 (Kotlin Android)

android - 自定义对象的 ArrayList 的保存状态

java - Android Geolocation 在模拟器中工作但不在手机中工作

time - 我期望来自以太网同一子网上的 0 层 NTP 服务器的时间有多准确?

java - TilesViewResolver 在部署为 war 时不工作

java - Maven项目如何配置gitlab ci + nexus release

Java局部对象变量的作用域

php - JSON 对象返回 null (android + json + php + mysql)

android - 无法使用通用代码获取 GPS 位置