Android开发百度SDK的使用--定位图层的使用

本文介绍了在Android应用中如何集成并使用百度地图SDK的定位图层功能。在上一节中,已经讲解了基础的定位设置。现在,我们将详细探讨在版本V3.2下,如何在Application的onCreate方法中初始化context信息,并在地图View的生命周期内管理定位显示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      在上一篇博客中对Android中调用百度的SDK的设置,以及简单的定位功能做了笔记,这次来记录一下如何使用百度地图接口的定位图层,ps:版本号V3.2

      1. 首先我们在使用百度SDK各组件之前需要初始化context信息并传入ApplicationContext中,这里在我的Application的onCreate方法中进行该步骤:

        @Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
		// 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext
		SDKInitializer.initialize(this);
	}
        2. 第二步,来加载显示地图的控件,这里我在布局文件中直接加载
       <com.baidu.mapapi.map.MapView
        android:id="@+id/bmapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true" />
         3. 获取BaiduMap对象,对MapView进行设置
        mBaiduMap = mMapView.getMap();//得到一个BaiduMap对象
	mBaiduMap.setMyLocationEnabled(true);//打开定位图层
             在定位操作同上一篇博客,在定位回调接口中对BaiduMap进行设置
        mLocClient.registerLocationListener(new BDLocationListener() {

		@Override
		public void onReceiveLocation(BDLocation location) {
			// TODO Auto-generated method stub
			if (location == null || mMapView == null)
				return;
			mTextView.setText("当前位置:"+location.getAddrStr());
			MyLocationData locData = new MyLocationData.Builder()
					.accuracy(location.getRadius())
					// 此处设置开发者获取到的方向信息,顺时针0-360
					.direction(100).latitude(location.getLatitude())
					.longitude(location.getLongitude()).build();
			mBaiduMap.setMyLocationData(locData);
			LatLng ll = new LatLng(location.getLatitude(), location
					.getLongitude());
			mUpdate = MapStatusUpdateFactory.newLatLngZoom(ll, 14);
			mBaiduMap.animateMapStatus(mUpdate);
			//mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);
			mBaiduMap
			.setMyLocationConfigeration(new MyLocationConfiguration(
					LocationMode.NORMAL, true, null));
			}
	});
               关于地图的设置进行一些说明:
              1)在setMyLocationConfigeration方法中可以设置地图的模式:对于传入参数的MyLocationConfiguration中LocationMode.NORMAL表示正常模式,LocationMode.COMPASS表示使用罗盘模式,LocationMode.FOLLOWING表示跟随模式
              2)设置显示当前定位点的图标,MyLocationConfiguration构造参数中第二个boolean值表示是否显示定位当前点图标,第三个参数表示个人设置的图标,null表示使用默认图标,如果我们想要修改可以使用 BitmapDescriptorFactory.fromResource(R.drawable.icon_geo)帮助我们创建自己图标(一个BitmapDescriptor对象),并将其传入MyLocationConfiguration构造函数

         4. 管理MapView:在百度SDK中对MapView定义了类似Activity的生命周期函数,方便我们的管理

        @Override
	protected void onPause() {
		mMapView.onPause();
		super.onPause();
	}

	@Override
	protected void onResume() {
		mMapView.onResume();
		super.onResume();
	}

	@Override
	protected void onDestroy() {
		// 退出时销毁定位
		mLocClient.stop();
		// 关闭定位图层
		mBaiduMap.setMyLocationEnabled(false);
		mMapView.onDestroy();
		mMapView = null;
		super.onDestroy();
	}
附上源码:
package com.example.gymapp;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import com.baidu.mapapi.map.BaiduMap;
import com.baidu.mapapi.map.BitmapDescriptor;
import com.baidu.mapapi.map.MapStatusUpdate;
import com.baidu.mapapi.map.MapStatusUpdateFactory;
import com.baidu.mapapi.map.MapView;
import com.baidu.mapapi.map.MyLocationConfiguration;
import com.baidu.mapapi.map.MyLocationConfiguration.LocationMode;
import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.model.LatLng;

public class MainActivity extends Activity {

	LocationClient mLocClient;
	BitmapDescriptor mCurrentMarker;

	MapView mMapView;
	BaiduMap mBaiduMap;
	private MapStatusUpdate mUpdate;

	private TextView mTextView;
	private Button loactionButton;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mMapView = (MapView) findViewById(R.id.bmapView);
		loactionButton = (Button) findViewById(R.id.button1);
		mTextView = (TextView) findViewById(R.id.textView1);
		mBaiduMap = mMapView.getMap();
		mBaiduMap.setMyLocationEnabled(true);

		mLocClient = new LocationClient(this);
		LocationClientOption option = new LocationClientOption();
		option.setOpenGps(true);
		option.setCoorType("bd09ll");
		option.setIsNeedAddress(true);
		mLocClient.setLocOption(option);

		mLocClient.registerLocationListener(new BDLocationListener() {

			@Override
			public void onReceiveLocation(BDLocation location) {
				// TODO Auto-generated method stub
				if (location == null || mMapView == null)
					return;
				mTextView.setText("当前位置:"+location.getAddrStr());
				MyLocationData locData = new MyLocationData.Builder()
						.accuracy(location.getRadius())
						// 此处设置开发者获取到的方向信息,顺时针0-360
						.direction(100).latitude(location.getLatitude())
						.longitude(location.getLongitude()).build();
				mBaiduMap.setMyLocationData(locData);
				LatLng ll = new LatLng(location.getLatitude(), location
						.getLongitude());
				mUpdate = MapStatusUpdateFactory.newLatLngZoom(ll, 14);
				mBaiduMap.animateMapStatus(mUpdate);
				//mCurrentMarker = BitmapDescriptorFactory.fromResource(R.drawable.icon_geo);
				mBaiduMap
				.setMyLocationConfigeration(new MyLocationConfiguration(
						LocationMode.FOLLOWING, true, null));
			}
		});
		mLocClient.start();
		loactionButton.setText("定位");
		loactionButton.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				// TODO Auto-generated method stub
				mLocClient.requestLocation();
			}
		});
	}

	@Override
	protected void onPause() {
		mMapView.onPause();
		super.onPause();
	}

	@Override
	protected void onResume() {
		mMapView.onResume();
		super.onResume();
	}

	@Override
	protected void onDestroy() {
		// 退出时销毁定位
		mLocClient.stop();
		// 关闭定位图层
		mBaiduMap.setMyLocationEnabled(false);
		mMapView.onDestroy();
		mMapView = null;
		super.onDestroy();
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值