package com.liyu.fakeweather.location; import android.content.Context; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import rx.Observable; import rx.Subscriber; /** * Created by liyu on 2016/11/2. */ public class LocationLastKnownOnSubscribe implements Observable.OnSubscribe<BDLocation> { private final Context context; public LocationLastKnownOnSubscribe(Context context) { this.context = context; } @Override public void call(final Subscriber<? super BDLocation> subscriber) { BDLocation lateKnownLocation = LocationClient.get(context).getLastKnownLocation(); if (lateKnownLocation != null) { subscriber.onNext(lateKnownLocation); subscriber.onCompleted(); } else { BDLocationListener bdLocationListener = new BDLocationListener() { @Override public void onReceiveLocation(BDLocation bdLocation) { subscriber.onNext(bdLocation); subscriber.onCompleted(); } }; LocationClient.get(context).locate(bdLocationListener); } } }