android高德地图后台运行,应用后台持续定位

本文介绍如何在App切换到后台并熄灭屏幕后仍能持续获取设备位置。通过启动连续定位功能,并设置周期唤醒机制,确保后台服务的正常运行。同时提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,使用场景

该示例主要展示App切换到后台熄灭屏幕后如何持续获得设备位置。

2,用到产品

核心类/接口

类接口说明版本

AMapLocationClientstartLocation();启动定位V2.0.0版本起

setLocationOption(mLocationOption);给定位客户端设置参数V2.0.0版本起

AMapLocationClientOptionsetInterval(long time);设置连续定位时间间隔V2.0.0版本起

AMapLocationListeneronLocationChanged(AMapLocation amapLocation) ;监听器回调方法V2.0.0版本起

3,核心难点

首先在本地服务中启动连续定位功能,通过设置一个Alarm定期对本地服务进行周期唤起,从而达到后台持续定位的效果。

1、在本地服务里启动连续定位:

//在activity中启动自定义本地服务LocationService

getApplicationContext().startService(new Intent(this, LocationService.class));

//在LocationService中启动定位

mLocationClient = new AMapLocationClient(this.getApplicationContext());

mLocationOption = new AMapLocationClientOption();

// 使用连续定位

mLocationOption.setOnceLocation(false);

// 每10秒定位一次

mLocationOption.setInterval(10 * 1000);

mLocationClient.setLocationOption(mLocationOption);

mLocationClient.setLocationListener(locationListener);

mLocationClient.startLocation();

2、创建并启动Alarm。

//创建Alarm并启动

Intent intent = new Intent("LOCATION_CLOCK");

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);

// 每五秒唤醒一次

long second = 15 * 1000;

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), second, pendingIntent);

3、通过Alarm启动本地服务,如果定位停止,在服务中再次启动。

public class AlarmReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

if (intent.getAction().equals("LOCATION_CLOCK")) {

Log.e("ggb", "--->>> onReceive LOCATION_CLOCK");

Intent locationIntent = new Intent(context, LocationService.class);

context.startService(locationIntent);

}

}

}

4、然后,定期在CPU休眠之前进行屏幕点亮操作。这个操作会导致cpu无法休眠耗电量增加,请谨慎使用。

if (powerManager == null) {

  //针对熄屏后cpu休眠导致的无法联网、定位失败问题,通过定期点亮屏幕实现联网,本操作会导致cpu无法休眠耗电量增加,谨慎使用

  powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);

  PowerManager.WakeLock wl=powerManager

.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP |PowerManager.SCREEN_DIM_WAKE_LOCK, "bright");

  wl.acquire();

  //点亮屏幕

  wl.release();

  //释放

}

转载于:android高德地图后台运行,应用后台持续定位_weixin_39799565的博客-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值