轻松学习android百度地图开发(一)


本篇主要实现百度地图的定位


1、先创建一个工程





2、在百度地图API官网下载开发包 http://developer.baidu.com/map/


可以直接下载开发包或者下载示例demo,从demo里拷贝开发包


将图中所示开发包拷贝到如图位置


3、为应用申请密匙

不熟悉的可以参考:http://developer.baidu.com/map/geosdk-android-key.htm

在百度地图API官网上登陆进入个人中心,创建应用


点击提交之后,查看我的应用,如下图所示,密匙申请成功




4、AndroidManifest.xml配置

添加以下权限

   
    
     
     
    
     
     
    
     
     
    
     
     
    
     
     
    
     
     
    
     
     
    
     
     
    
     
     
    
     
     
    
     
     
    
     
     
    
     
     
    
     
     
    
     
     
    
     
     
    
     
     
    
     
     
    
     
     


配置meta-data和service


5、创建MainActivity

新建activity_maps.xml,如下图所示,将百度地图的mapView填充整个手机屏幕


再创建MainActivity


public class MainActivity extends Activity implements OnClickListener,
		BDLocationListener {

	/**
	 * 验证百度api_key是否正确
	 */
	private BroadcastReceiver broadcastReceiver2 = new BroadcastReceiver() {
		public void onReceive(Context context, Intent intent) {
			String s = intent.getAction();
			if (s.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)) {
				Toast.makeText(MainActivity.this,
						"key 验证出错! 请在 AndroidManifest.xml 文件中检查 key 设置",
						Toast.LENGTH_SHORT).show();
			} else if (s
					.equals(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)) {
			}
		}
	};

	MapView mMapView = null;
	ImageButton fangda;
	ImageButton suoxiao;
	ImageButton loc;
	BaiduMap baiduMap;
	LocationClient locClient;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		SDKInitializer.initialize(this.getApplicationContext());
		IntentFilter iFilter = new IntentFilter();
		iFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);
		iFilter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);
		registerReceiver(broadcastReceiver2, iFilter);

		setContentView(R.layout.acitvity_maps);
		loc = (ImageButton) findViewById(R.id.button11);
		fangda = (ImageButton) findViewById(R.id.button10);
		suoxiao = (ImageButton) findViewById(R.id.button9);
		fangda.setOnClickListener(this);
		suoxiao.setOnClickListener(this);
		loc.setOnClickListener(this);
		mMapView = (MapView) findViewById(R.id.bmapView);
		mMapView.showZoomControls(false);
		baiduMap = mMapView.getMap();
		baiduMap.setMapStatus(MapStatusUpdateFactory.zoomTo(18));
		// 开启定位图层
		baiduMap.setMyLocationEnabled(true);
		LocationClientOption option = new LocationClientOption();
		option.setOpenGps(true);
		option.setAddrType("detail");
		option.setCoorType("bd09ll");
		locClient = new LocationClient(this);
		locClient.setLocOption(option);
		locClient.registerLocationListener(this);
		locClient.start();
	}

	@Override
	public void onReceiveLocation(BDLocation location) {
		if (location == null || mMapView == null) {
			return;
		}
		// 获取用户位置信息
		MyLocationData locData = new MyLocationData.Builder()
				.accuracy(location.getRadius())
				// 此处设置开发者获取到的方向信息,顺时针0-360
				.direction(100).latitude(location.getLatitude())
				.longitude(location.getLongitude()).build();
		baiduMap.setMyLocationData(locData);
		// 构建用户经度纬度
		LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
		// 地图中心点定位
		MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll);
		baiduMap.animateMapStatus(u);
	}

	@Override
	public void onDestroy() {
		locClient.stop();
		baiduMap.setMyLocationEnabled(false);
		mMapView.onDestroy();
		mMapView = null;
		Log.d("-d", "mapview");
		super.onDestroy();
	}

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

		super.onDestroy();
	}

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

	@Override
	public void onClick(View arg0) {
		if (arg0 == fangda) {
			// 地图放大
			MapStatusUpdate u = MapStatusUpdateFactory.zoomTo(baiduMap
					.getMapStatus().zoom + 1);
			baiduMap.animateMapStatus(u);
		} else if (arg0 == suoxiao) {
			// 地图缩放
			MapStatusUpdate u = MapStatusUpdateFactory.zoomTo(baiduMap
					.getMapStatus().zoom - 1);
			baiduMap.animateMapStatus(u);
		} else if (arg0 == loc) {
			// 回到当前定位位置
			if (!locClient.isStarted()) {
				locClient.start();
			}
			locClient.requestLocation();
		}
	}

}

运行该工程,如下图所示



至此,我们就已经实现了android百度地图开发的第一步,下次将介绍基于当前位置搜索周边附近吃喝玩乐的地方。

以上页面图片资源下载:http://download.csdn.net/detail/qq_27128865/9096147







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值