在后台每10分钟检查一次位置

时间:2016-04-19 04:36:18

标签: android gps location

我的要求是使用后台服务每10分钟检查一次设备的位置。因此,每10分钟应该发生的事情的基本要点是 -

  • 启动服务。
  • 等待一分钟(最多)以使侦听器获取位置,一旦获取该位置,移除侦听器然后停止服务。
  • 如果侦听器没有响应,请使用getLastKnownLocation(),删除侦听器,然后停止服务。
  • 如果GPS已关闭,它会向应用报告(此步骤正常)

到目前为止我尝试过做什么 -

  • 使用AlarmManager
  • 制作每10分钟触发一次的服务
  • 在此服务中添加了位置监听器。
  • 来自LocationListener的
  • onLocationChanged()包含方法 - stopSelf(),以便服务在收到位置后结束。但是,这种方法被称为无数次。我在调试时检查了一下。这是因为onLocationChanged()有很多实例被调用吗?

我不需要整个代码作为答案,我宁愿欣赏我应该采用的策略,它将满足我的要求,而不会损害电池电量。与我的方法一样,除非并且直到找到位置,否则GPS保持开启,不断地耗尽电池。

3 个答案:

答案 0 :(得分:1)

使用FusedLocationAPIlocation request代替每10分钟安排一次的闹钟管理器,以获得准确的位置。

<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>

只要您需要位置

,请调用此方法
            LocationRequest mLocationRequest = LocationRequest.create();
            mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);//Change to PRIORITY_HIGH_ACCURACY for more accurate.
            mLocationRequest.setInterval(600000); // Update location every 10 minute
            LocationServices.FusedLocationApi.requestLocationUpdates(
                    mGoogleApiClient, mLocationRequest, this);

答案 1 :(得分:0)

试试这个

// The minimum distance to change updates in meters
private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters

// The minimum time between updates in milliseconds
private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 10; // 10 minute

了解更多信息示例请尝试使用此

Try with this link click here

答案 2 :(得分:0)

  来自LocationListener的

onLocationChanged()包含方法 - stopSelf(),以便服务在收到位置后结束。但是,这种方法被称为无数次。我在调试时检查了一下。这是因为onLocationChanged()有很多实例叫做?

基本上,当你收到第一个位置时,也可以通过stopSelf()停止服务。

但onLocationChanged方法如何被多次调用?

在服务关闭时,您不删除位置更新吗?