百度地图开发之二[地图定位显示]

三.创建项目:

1.下载lib包,我的版本是v2.4.0,创建项目工程把jar和.so文件引入进去;


2.编写布局文件restau_map.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <com.baidu.mapapi.map.MapView
        android:id="@+id/bmapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true" />

</LinearLayout>

3.编写java文件Restau_Map.java

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

import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.MKEvent;
import com.baidu.mapapi.map.MKMapViewListener;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapPoi;
import com.baidu.mapapi.map.MapView;
import com.baidu.platform.comapi.basestruct.GeoPoint;

/**
 * 
 * 百度地图显示饭馆位置
 * 
 * @author WangTanyun
 * 
 */

public class Restau_Map extends Activity {

	private double mLat;// 位置纬度
	private double mLon;// 位置经度

	private BMapManager mBMapManager = null;
	// 百度地图官网申请的密钥
	private static final String BAIDU_MAP_KEY = "xxxxxxxxxxxxxxx"; // 百度地图官网申请的密钥

	/**
	 * MapView 是地图主控件
	 */
	private MapView mMapView = null;
	/**
	 * 用MapController完成地图控制
	 */
	private MapController mMapController = null;
	/**
	 * MKMapViewListener 用于处理地图事件回调
	 */
	private MKMapViewListener mMapListener = null;

	public void onCreate(Bundle savedInstanceState) {
		/**
		 * 使用地图sdk前需先初始化BMapManager. BMapManager是全局的,可为多个MapView共用,它需要地图模块创建前创建,
		 * 并在地图地图模块销毁后销毁,只要还有地图模块在使用,BMapManager就不应该销毁
		 */

		super.onCreate(savedInstanceState);
		initEngineManager();
		setContentView(R.layout.restau_map);

		initViewMap();
	}

	/**
	 * 进行验证key
	 * 
	 * @param pContext
	 */
	private void initEngineManager() {
		if (mBMapManager == null) {
			mBMapManager = new BMapManager(getApplicationContext());
			mBMapManager.init(BAIDU_MAP_KEY, new MKGeneralListener() {

				@Override
				public void onGetPermissionState(int iError) {
					if (iError == MKEvent.ERROR_PERMISSION_DENIED) {
						// 授权Key错误:
						Toast.makeText(Restau_Map.this,
								"请输入正确的授权Key,并检查您的网络连接是否正常!error: " + iError,
								Toast.LENGTH_LONG).show();
					}
				}

				@Override
				public void onGetNetworkState(int iError) {
					if (iError == MKEvent.ERROR_NETWORK_CONNECT) {
						Toast.makeText(Restau_Map.this, "您的网络出错啦!",
								Toast.LENGTH_LONG).show();
					} else if (iError == MKEvent.ERROR_NETWORK_DATA) {
						Toast.makeText(Restau_Map.this, "输入正确的检索条件!",
								Toast.LENGTH_LONG).show();
					}
				}
			});
		}
	}

	private void initViewMap() {
		/**
		 * 由于MapView在setContentView()中初始化,所以它需要在BMapManager初始化之后
		 */
		mMapView = (MapView) findViewById(R.id.bmapView);
		/**
		 * 设置显示放大缩小的控制按钮
		 */
		mMapView.setBuiltInZoomControls(true);
		/**
		 * 设置地图显示模式setTraffic交通setSatellite卫星
		 */
		// mMapView.setTraffic(true);
		// mMapView.setSatellite(true);// 设置为卫星模式
		/**
		 * 获取地图控制器
		 */
		mMapController = mMapView.getController();
		/**
		 * 设置地图是否响应点击事件 .
		 */
		mMapController.enableClick(true);
		/**
		 * 设置地图缩放级别
		 */
		mMapController.setZoom(12);

		mLat = 39.945;// 位置纬度赋值
		mLon = 116.404;// 位置经度赋值

		GeoPoint geoPoint = new GeoPoint((int) (mLat * 1e6), (int) (mLon * 1e6));
		mMapController.setCenter(geoPoint);

		/**
		 * MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()
		 */
		mMapListener = new MKMapViewListener() {
			@Override
			public void onMapMoveFinish() {
				/**
				 * 在此处理地图移动完成回调 缩放,平移等操作完成后,此回调被触发
				 */
			}

			@Override
			public void onClickMapPoi(MapPoi mapPoiInfo) {
				/**
				 * 在此处理底图poi点击事件 显示底图poi名称并移动至该点 设置过:
				 * mMapController.enableClick(true); 时,此回调才能被触发
				 * 
				 */
				String title = "";
				if (mapPoiInfo != null) {
					title = mapPoiInfo.strText;
					Toast.makeText(Restau_Map.this, title, Toast.LENGTH_SHORT)
							.show();
					mMapController.animateTo(mapPoiInfo.geoPt);
				}
			}

			@Override
			public void onGetCurrentMap(Bitmap b) {
				/**
				 * 当调用过 mMapView.getCurrentMap()后,此回调会被触发 可在此保存截图至存储设备
				 */
			}

			@Override
			public void onMapAnimationFinish() {
				/**
				 * 地图完成带动画的操作(如: animationTo())后,此回调被触发
				 */
			}

			/**
			 * 在此处理地图载完成事件
			 */
			@Override
			public void onMapLoadFinish() {
				Toast.makeText(Restau_Map.this, "地图加载完成", Toast.LENGTH_SHORT)
						.show();

			}
		};
		mMapView.regMapViewListener(mBMapManager, mMapListener);
	}

	@Override
	protected void onPause() {
		/**
		 * MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()
		 */
		mMapView.onPause();
		if (mBMapManager != null) {
			mBMapManager.stop();
		}
		super.onPause();
	}

	@Override
	protected void onResume() {
		/**
		 * MapView的生命周期与Activity同步,当activity恢复时需调用MapView.onResume()
		 */
		mMapView.onResume();
		if (mBMapManager != null) {
			mBMapManager.start();
		}
		super.onResume();
	}

	@Override
	protected void onDestroy() {
		/**
		 * MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy()
		 */
		mMapView.destroy();
		if (mBMapManager != null) {
			mBMapManager.destroy();
			mBMapManager = null;
		}
		super.onDestroy();
	}

	@Override
	protected void onSaveInstanceState(Bundle outState) {
		super.onSaveInstanceState(outState);
		mMapView.onSaveInstanceState(outState);

	}

	@Override
	protected void onRestoreInstanceState(Bundle savedInstanceState) {
		super.onRestoreInstanceState(savedInstanceState);
		mMapView.onRestoreInstanceState(savedInstanceState);
	}
}
4.加入权限配置

    <!-- GPS -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCES_MOCK_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_GPS" />
    <!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? -->
    <uses-permission android:name="android.permission.GET_TASKS" />
    <uses-permission android:name="android.permission.BROADCAST_STICKY" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <!-- 来电消音 -->
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
5.运行截图

四.其他:

 1:MapController: 地图引擎管理类: BMapManager据有Application级别的生命周期,BMapManager应在sdk功能模块使用前初始化, 并且在sdk功能模块销毁后销毁.

2:MapView:一个显示地图的视图,当被焦点选中时,它能捕获按键事件和触摸手势去平移和缩放地图。MapView的创建可以使用在XML布局的方式创建,也可以使用构建函           数创建MapView的生命周期需要与Activity同步,即需要在Activity.onPause中调用onPause(), 在Activity.onResume中调用onResume(),在Activity.onDestroy中调用destory();



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值