Android Open Source - Common-Library Location Manager






From Project

Back to project page Common-Library.

License

The source code is released under:

Apache License

If you think the Android project Common-Library listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.morgan.library.service;
//from w  ww .  jav  a2s  . c om
import java.util.ArrayList;
import java.util.List;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.morgan.library.R;
import com.morgan.library.app.APPContext;

/**
 * ???????????????????????????????{@link #getLastLocation()}????????????????.
 * 
 * @author Morgan.Ji
 * 
 */
public class LocationManager {

  public static final double NO_LOCATION = 4.9E-324;
  private static LocationManager instance;
  private LocationClient mLocClient;
  private static final int minTime = 10 * 1000;
  private List<LocationCallBack> mCallback;
  private BDLocationListener mBDLocationListener;
  private BDLocation mLastLocation;

  private LocationManager() {
    mLocClient = new LocationClient(APPContext.getContext());
    mLastLocation = mLocClient.getLastKnownLocation();
    mCallback = new ArrayList<LocationCallBack>();
    setLocationOption();
    registerLocationListener();
  }

  private void setLocationOption() {
    LocationClientOption option = new LocationClientOption();
    // ??gps
    option.setOpenGps(true);
    option.setPriority(LocationClientOption.GpsFirst);
    // ????????
    option.setCoorType("bd09ll");
    option.setAddrType("All");
    option.setScanSpan(minTime);
    option.setProdName(APPContext.getContext().getString(R.string.app_name));
    option.disableCache(true);
    mLocClient.setLocOption(option);
  }

  public static LocationManager getInstance() {
    if (instance == null) {
      instance = new LocationManager();
    }
    return instance;
  }

  private void startLocClient() {
    if (mLocClient != null && !mLocClient.isStarted()) {
      mLocClient.start();
    }
  }

  private void requestLocation() {
    if (mLocClient != null && !mLocClient.isStarted()) {
      mLocClient.requestLocation();
    }
  }

  private void stopLocClient() {
    if (mLocClient != null) {
      mLocClient.stop();
    }
  }

  public BDLocation getLastLocation() {
    return mLastLocation;
  }

  private void registerLocationListener() {
    if (mBDLocationListener == null) {
      mBDLocationListener = new MyLocationListenner();
      mLocClient.registerLocationListener(mBDLocationListener);
    }
  }

  public void destoryLocationListener() {
    mLocClient.unRegisterLocationListener(mBDLocationListener);
    mBDLocationListener = null;
  }

  public void startLocate(LocationCallBack callback) {
    if (!mCallback.contains(callback)) {
      this.mCallback.add(callback);
    }
    startLocClient();
  }

  public void removeCallback(LocationCallBack callback) {
    this.mCallback.remove(callback);
    if (mCallback.size() == 0) {
      stopLocClient();
    }
  }

  public class MyLocationListenner implements BDLocationListener {
    @Override
    public void onReceiveLocation(BDLocation location) {
      if (location == null || location.getLatitude() == NO_LOCATION) {
        for (int i = mCallback.size() - 1; i >= 0; i--) {
          mCallback.get(i).onNoLocation();
        }
        if (mCallback.size() > 0) {
          requestLocation();
        }
      } else {
        updateLocation(location);
      }
    }

    public void onReceivePoi(BDLocation poiLocation) {
      if (poiLocation == null) {
        return;
      }
    }
  }

  private void updateLocation(BDLocation location) {
    if (location.getAltitude() < 0 || location.getAltitude() == NO_LOCATION) {
      location.setAltitude(0);
    }
    for (int i = mCallback.size() - 1; i >= 0; i--) {
      mCallback.get(i).onReceiveLocation(location);
    }
    mLastLocation = location;
  }

  public interface LocationCallBack {
    /**
     * ??????
     * 
     * @param location
     */
    void onReceiveLocation(BDLocation location);

    /**
     * ???????????
     */
    void onNoLocation();
  }
}




Java Source Code List

com.morgan.library.app.APPContext.java
com.morgan.library.app.AppManager.java
com.morgan.library.app.BaseActivity.java
com.morgan.library.app.BaseFragmentActivity.java
com.morgan.library.app.BaseListActivity.java
com.morgan.library.app.BaseScreenShotActivity.java
com.morgan.library.app.CommonApplication.java
com.morgan.library.async.CustomAsyncTask.java
com.morgan.library.async.Destroyable.java
com.morgan.library.async.IFeedback.java
com.morgan.library.async.TaskManager.java
com.morgan.library.model.NetResult.java
com.morgan.library.model.SpinnerItem.java
com.morgan.library.model.WeatherType.java
com.morgan.library.model.Weather.java
com.morgan.library.net.ApiClient.java
com.morgan.library.net.ApiManager.java
com.morgan.library.net.ApiUrl.java
com.morgan.library.net.IApiClient.java
com.morgan.library.net.JsonUtils.java
com.morgan.library.net.MockApiClient.java
com.morgan.library.service.LocationManager.java
com.morgan.library.service.WeatherManager.java
com.morgan.library.snippet.CookieShare.java
com.morgan.library.snippet.CustomService.java
com.morgan.library.snippet.ExceptionCatcher.java
com.morgan.library.snippet.ProxyUsage.java
com.morgan.library.snippet.SocketClient.java
com.morgan.library.snippet.SocketServer.java
com.morgan.library.snippet.UDPClient.java
com.morgan.library.snippet.UDPServer.java
com.morgan.library.snippet.XMLAnalyze.java
com.morgan.library.task.GetWeatherTask.java
com.morgan.library.utils.AppUtils.java
com.morgan.library.utils.DateUtils.java
com.morgan.library.utils.DensityUtils.java
com.morgan.library.utils.FileUtils.java
com.morgan.library.utils.GB2Alpha.java
com.morgan.library.utils.HttpClientUtil.java
com.morgan.library.utils.HttpClientUtils.java
com.morgan.library.utils.HttpURLUtil.java
com.morgan.library.utils.ImageUtils.java
com.morgan.library.utils.KeyBoardUtils.java
com.morgan.library.utils.LocationUtils.java
com.morgan.library.utils.Logger.java
com.morgan.library.utils.NetUtils.java
com.morgan.library.utils.PhoneUtils.java
com.morgan.library.utils.SDCardUtils.java
com.morgan.library.utils.StrUtils.java
com.morgan.library.widget.AutoHideMenuWidget.java
com.morgan.library.widget.BadgeView.java
com.morgan.library.widget.CityPickerWidget.java
com.morgan.library.widget.CustomGridView.java
com.morgan.library.widget.CustomListView.java
com.morgan.library.widget.CustomToast.java
com.morgan.library.widget.CustomViewPager.java
com.morgan.library.widget.DatePickerWidget.java
com.morgan.library.widget.DirectionScrollView.java
com.morgan.library.widget.FallBallView.java
com.morgan.library.widget.HeightPickerWidget.java
com.morgan.library.widget.InterceptPressLayout.java
com.morgan.library.widget.ItalicTextView.java
com.morgan.library.widget.PopupMenuWidget.java
com.morgan.library.widget.PullToRefreshListView.java
com.morgan.library.widget.ScreenShotView.java
com.morgan.library.widget.SexPickerWidget.java
com.morgan.library.widget.SlideUpOpenWidget.java
com.morgan.library.widget.SwipeListView.java
com.morgan.library.widget.TimePickerWidget.java
com.morgan.library.widget.TouchZoomImageView.java
com.morgan.library.widget.WaitScreenWidget.java
com.morgan.library.widget.WebViewDialog.java
com.morgan.library.widget.WeightPickerWidget.java
com.morgan.library.widget.calendar.CalendarGridView.java
com.morgan.library.widget.calendar.CalendarScrollView.java
com.morgan.library.widget.calendar.CalendarViewFlipper.java
com.morgan.library.widget.calendar.CalendarWidget.java
com.morgan.library.widget.numberpicker.NumberPicker.java
com.morgan.library.widget.numberpicker.Scroller.java
com.morgan.library.widget.slidemenu.ScrollDetectorFactory.java
com.morgan.library.widget.slidemenu.ScrollDetectors.java
com.morgan.library.widget.slidemenu.SlideMenu.java