使用高德地图API开发定位插件

           高德地图定位是常见的API使用,下面我们开始学习利用高德地图设置一个定位插件,来为我们的地图程序提供定位服务。首先明确一点,定位是一个耗时的过程,我们在启动api的定位服务时不能立即获取到位置信息,那我们就必须是用监听器来进行监听。下面请看代码:

         

public class LocationGaoDe {
     public static LocationGaoDe local;//全局静态实例.
     private LocationManagerProxy mLocationManagerProxy;//高德地图api管理接口
     LocationListener listener;
     String location;//返回的位置字段和经纬度
	 private double Y;//纬度
	 private double X;//经度
     boolean find=false;//查询结果.
     
     public static LocationGaoDe getInstances(){
 		// 获取定位插件的单实例
 		if (null == local) {
 			local = new LocationGaoDe();
 		}
 		return local;
 	}
    public String getLocal(){//定位方法,注意该方法并不一定能立刻获取位置信息.
    	mLocationManagerProxy = LocationManagerProxy.getInstance(MyApplication.getInstance());
		mLocationManagerProxy.setGpsEnable(false);
		listener=new LocationListener();
		location="";//每次都初始化为空
		 
		// 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗,
		// 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用removeUpdates()方法来取消定位请求
		// 在定位结束后,在合适的生命周期调用destroy()方法
		// 其中如果间隔时间为-1,则定位只定一次,
		//在单次定位情况下,定位无论成功与否,都无需调用removeUpdates()方法移除请求,定位sdk内部会移除
		
		onGetLocation l=new onGetLocation(){//构造一个监听器类。

			@Override
			public void get() {//成功的时候将定位信息写入sp中
				  
				 SharedPreferenceUtil.setInfoToShared("Longitude",String.valueOf(Y));
				 SharedPreferenceUtil.setInfoToShared("Latitude",String.valueOf(X));
				 SharedPreferenceUtil.setInfoToShared("Location",location);
				  
			}

			@Override
			public void fail() {//失败的时候作为0默认值
				 SharedPreferenceUtil.setInfoToShared("Longitude","0");
				 SharedPreferenceUtil.setInfoToShared("Latitude","0");
				 SharedPreferenceUtil.setInfoToShared("Location","");
			}
			
		};
		
		listener.L=l;//设置定位服务的监听
		mLocationManagerProxy.requestLocationData(LocationProviderProxy.AMapNetwork,-1, 17, listener);//开启定位服务
		 
		return location;
    }
    
    
     
    
    
    public class  LocationListener implements   AMapLocationListener{//定位监听器,用于监听位置定位.
    	public onGetLocation L;//设置一个监听对象,用于定位成功或者失败.
		@Override
		public void onLocationChanged(Location arg0) {
			 
			
		}

		@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 arg0) {
			if (arg0!=null&&arg0.getAMapException().getErrorCode() == 0) {
				// 定位成功回调信息,设置相关消息
				 
				Y=arg0.getLongitude();//经度
				 
				X=arg0.getLatitude();//纬度
			 
				location=arg0.getAddress();
				mLocationManagerProxy.removeUpdates(listener);//注销监听器回收资源.
				L.get();//定位成功回调,用于把信息传递出去
				 
				
			}
			else if(arg0!=null&&arg0.getAMapException().getErrorCode()!= 0){
				L.fail();//定位失败.
				 
			}
			 
		}
    	
    }
    
    
    public interface onGetLocation{//监听器,代码的关键部分.在定位失败或者成功的时候调用监听器类的回调方法
    	  public abstract void get();//定位成功时调用
    	  public abstract void fail();//定位失败
    }
     
    
    
    public String  getY(){
    	String y=SharedPreferenceUtil.getInfoFromShared("Longitude","0");//经度
    	return  y;
    }
    
    public String  getX(){
    	String x=SharedPreferenceUtil.getInfoFromShared("Latitude","0");//纬度
    	return  x;
    }
    
    public String getLocation(){
    	String lo=SharedPreferenceUtil.getInfoFromShared("Location","");//位置.
    	return lo; 
    }
}

        这样我们就可以在app启动的时候通过LocationGaoDe.getInstances().getLocal() ;的方式进行定位了.当程序从启动页到主界面的时候有足够的时间进行定位操作.这样我们通过三个get方法就能得到定位数据了

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值