Android-LocationManager注册LocationListener及回调流程分析
android LocationManager注册LocationListener过程
private LocationManager lm;
private LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location){}
}
long minTime = 700;
float minDistance = 0.0f;
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, minTime, minDistance, locationListener);
其中minTime, minDistance定义后在 callLocationChangedLocked() 前会通过 shouldBroadcastSafe()进行条件检查;
frameworks\base\location\java\android\location\LocationManager.java
private final ILocationManager mService;
requestLocationUpdates(LocationRequest request, LocationListener listener, Looper looper, PendingIntent intent) {
requestLocationUpdates(request, listener, null, null) {
// wrap the listener class
ListenerTransport transport = wrapListener(listener, looper);
mService.requestLocationUpdates(request, transport, intent, packageName) {
// new receiver(listener);
requestLocationUpdatesLocked(sanitizedRequest, recevier, pid, uid, packageName);
}
}
}
frameworks\base\services\core\java\com\android\server\LocationManagerService.java
private final class Receiver implements IBinder.DeathRecipient, PendingIntent.OnFinished {
final ILocationListener mListener;
final HashMapmUpdateRecords = new HashMap<>();
public boolean callLocationChangedLocked(Location location) {
mListener.onLocationChanged