binbinyang---百度地图androidAPI Android SDK v3.5.0------------2.定位功能

按照百度地图官网提供的API,前面完成了所谓的hello map的完成,现在要说的是接下来的一个功能,定位功能

初始化定位相关代码

	/** 
     * 初始化定位相关代码 
     */
	private void initLocation() {
		mLocationClient = new LocationClient(this);
		mLocationListener = new MyLocationListener();
		mLocationClient.registerLocationListener(mLocationListener);
		if (mLocationClient != null && !mLocationClient.isStarted()) {
			mLocationClient.requestLocation();
			mLocationClient.start();
		}

		LocationClientOption option = new LocationClientOption();
		option.setLocationMode(LocationClientOption.LocationMode.Battery_Saving);// 设置定位模式
		option.setOpenGps(true);
		option.setCoorType("bd09ll");// 设置坐标类型,返回的定位结果是百度经纬度,默认值gcj02
		option.setIsNeedAddress(true);// 返回的定位结果包含地址信息
		option.setNeedDeviceDirect(true);// 返回的定位结果包含手机机头的方向
		option.setScanSpan(1000);// 每过1000毫秒进行一次请求。

		mLocationClient.setLocOption(option);

	}


2.定位的监听器

/** 
     * 实现实位回调监听 
     */ 
	private class MyLocationListener implements BDLocationListener {

		/**
		 * 定位成功以后的回调
		 */
		@Override
		public void onReceiveLocation(BDLocation location) {
			MyLocationData data = new MyLocationData.Builder()//
					.accuracy(location.getRadius())//
					.latitude(location.getLatitude())//
					.longitude(location.getLongitude())//
					.build();
			// 设置定位数据  
			mBaiduMap.setMyLocationData(data);

			mLatitude = location.getLatitude();
			mLongtitude = location.getLongitude();
			 // 第一次定位时,将地图位置移动到当前位置  
			if (isFirstIn) {
				LatLng latLng = new LatLng(location.getLatitude(),
						location.getLongitude());
				MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
				mBaiduMap.animateMapStatus(msu);
				isFirstIn = false;

				//吐司
				Toast.makeText(MainActivity.this, location.getAddrStr(), 10)
						.show();
			}

		}

其次定位这个功能,是非常消耗电量的,为了用户体验考虑。在onStart中开启定位,在onStop中关闭定位~~这样应用最小化时就不会一直在哪GPS请求定位了,、

@Override
	protected void onResume() {
		super.onResume();
		// 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
		mMapView.onResume();
	}

	
	
	@Override
	protected void onStart() {
		super.onStart();
		/**
		 * 开启定位
		 */
		mBaiduMap.setMyLocationEnabled(true);
		if (mLocationClient.isStarted())
			mLocationClient.start();
	}

	@Override
	protected void onPause() {
		super.onPause();
		// 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
		mMapView.onPause();
	}

	@Override
	protected void onStop() {
		// TODO Auto-generated method stub
		super.onStop();
		/**
		 * 停止定位
		 */
		mBaiduMap.setMyLocationEnabled(false);
		mLocationClient.stop();
	}

	@Override
	protected void onDestroy() {
		super.onDestroy();
		// 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
		mMapView.onDestroy();
	}


必须在AndroidManifest.xml配一个service

  <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" >
        </service>


定位的核心代码

/**
	 * 定位到我的位置
	 *  地图移动到我的位置,此处可以重新发定位请求,然后定位;  
     * 直接拿最近一次经纬度,如果长时间没有定位成功,可能会显示效果不好 
	 * 
	 */
	private void centerToMyLocation() {
		LatLng latLng = new LatLng(mLatitude, mLongtitude);
		MapStatusUpdate msu = MapStatusUpdateFactory.newLatLng(latLng);
		mBaiduMap.animateMapStatus(msu);
	}


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值