MyLocationListener位置改变监听器
LocationManager对象调用requestLocationUpdates(String provider, long minTime, float minDistance,LocationListener listener),在回调的方法中获取改变后的Location对象,其中provider表示LocationManager.GPS_PROVIDER,minTime表示最短时间间隔内更新位置信息(单位毫秒),minDistance表示最短距离内更新位置信息(单位米),MyLocationListener继承LocationListener,需要重写的方法如下:
package cn.teachcourse.utils;
import android.location.Location;
import android.location.LocationListener;
import android.os.Bundle;
/*
@author postmaster@teachcourse.cn
@date 创建于:2016-1-22
*/
public class MyLocationListener implements LocationListener {
private LocationTool gpsTool;
/**构造方法,传入LocationTool
* @param gpsTool
*/
public MyLocationListener(LocationTool gpsTool) {
super();
this.gpsTool = gpsTool;
}
/**
* 当前位置改变后,回调onLocationChanged方法,获取改变后的Location对象
*
*/
@Override
public void onLocationChanged(Location location) {
if (location != null) {
gpsTool.setLocation(location);
}
}
/**
* 当provider状态改变时回调的方法,当前的provider无法读取位置信息或者provider从无法读取位置信息变为能够读取为信息被回调的方法
*
*/
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
/**
* 当provider被用户允许开启,回调的onProviderEnabled方法,比如:开启定位功能,回调该方法
*
*/
@Override
public void onProviderEnabled(String provider) {
Location l = gpsTool.getLocationManager()
.getLastKnownLocation(provider);
if (l != null) {
gpsTool.setLocation(l);
}
}
/**
* 当provider不被用户允许开启,回调的onProviderDisabled方法,比如:无法开启定位功能,回调该方法
*
*/
@Override
public void onProviderDisabled(String provider) {
gpsTool.setLocation(null);
}
}
LocationService服务读取位置信息
为什么要开启Service呢?Service和Activity、Fragment一样也有自己的生命周期,onCreate——>onStartCommand(onStart)——>onUnbind——>onRebind——>onDestroy,在LocationService执行的操作是启动一个线程获取更新后的位置信息,并以广播的方式发送出去,具体代码如下:










