/**  
 * Project Name:Android_Car_Example  
 * File Name:LocationTask.java  
 * Package Name:com.amap.api.car.example  
 * Date:2015年4月3日上午9:27:45  
 *  
 */

package com.amap.api.car.example;

import android.content.Context;
import android.location.Location;
import android.os.Bundle;
import android.text.TextUtils;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.location.LocationManagerProxy;
import com.amap.api.location.LocationProviderProxy;

/**
 * ClassName:LocationTask <br/>
 * Function: 简单封装了定位请求,可以进行单次定位和多次定位,注意的是在app结束或定位结束时注意销毁定位 <br/>
 * Date: 2015年4月3日 上午9:27:45 <br/>
 * 
 * @author yiyi.qi
 * @version
 * @since JDK 1.6
 * @see
 */
public class LocationTask implements AMapLocationListener,
		OnLocationGetListener {

	private LocationManagerProxy mLocationManagerProxy;

	private static LocationTask mLocationTask;

	private Context mContext;

	private OnLocationGetListener mOnLocationGetlisGetListener;

	private RegeocodeTask mRegecodeTask;

	private LocationTask(Context context) {
		mLocationManagerProxy = LocationManagerProxy.getInstance(context);
		mRegecodeTask = new RegeocodeTask(context);
		mRegecodeTask.setOnLocationGetListener(this);
		mContext = context;
	}

	public void setOnLocationGetListener(
			OnLocationGetListener onGetLocationListener) {
		mOnLocationGetlisGetListener = onGetLocationListener;
	}

	public static LocationTask getInstance(Context context) {
		if (mLocationTask == null) {
			mLocationTask = new LocationTask(context);
		}
		return mLocationTask;
	}

	/**  
	 * 开启单次定位
	 */
	public void startSingleLocate() {
		mLocationManagerProxy.requestLocationData(
				LocationProviderProxy.AMapNetwork, -1, 10, this);
	}

	/**  
	 * 开启多次定位
	 */
	public void startLocate() {
		mLocationManagerProxy.requestLocationData(
				LocationProviderProxy.AMapNetwork, 5 * 1000, 10, this);
	}

	/**  
	 * 结束定位,可以跟多次定位配合使用
	 */
	public void stopLocate() {
		mLocationManagerProxy.removeUpdates(this);

	}

	/**  
	 * 销毁定位资源
	 */
	public void onDestroy() {
		mLocationManagerProxy.removeUpdates(this);
		mLocationManagerProxy.destroy();
	}

	@Override
	public void onLocationChanged(Location arg0) {

		// TODO Auto-generated method stub

	}

	@Override
	public void onProviderDisabled(String arg0) {

		// TODO Auto-generated method stub

	}

	@Override
	public void onProviderEnabled(String arg0) {

		// TODO Auto-generated method stub

	}

	@Override
	public void onStatusChanged(String arg0, int arg1, Bundle arg2) {

		// TODO Auto-generated method stub

	}

	@Override
	public void onLocationChanged(AMapLocation amapLocation) {
		if (amapLocation != null && amapLocation.getAMapException() != null
				&& amapLocation.getAMapException().getErrorCode() == 0) {
			PositionEntity entity = new PositionEntity();
			entity.latitue = amapLocation.getLatitude();
			entity.longitude = amapLocation.getLongitude();

			if (!TextUtils.isEmpty(amapLocation.getAddress())) {
				entity.address = amapLocation.getAddress();
			}
			mOnLocationGetlisGetListener.onLocationGet(entity);

		}

	}

	@Override
	public void onLocationGet(PositionEntity entity) {

		// TODO Auto-generated method stub

	}

	@Override
	public void onRegecodeGet(PositionEntity entity) {

		// TODO Auto-generated method stub

	}

}