核心类/接口
类 |
接口 |
说明 |
版本 |
---|---|---|---|
AMapLocationClient |
startLocation(); |
启动定位 |
V2.0.0版本起 |
|
setLocationOption(mLocationOption); |
给定位客户端设置参数 |
V2.0.0版本起 |
AMapLocationClientOption |
setInterval(long time); |
设置连续定位时间间隔 |
V2.0.0版本起 |
AMapLocationListener |
onLocationChanged(AMapLocation amapLocation) ; |
监听器回调方法 |
V2.0.0版本起 |
核心难点
首先在本地服务中启动连续定位功能,通过设置一个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);
}
}
}