Android版百度地图的移动定位开发过程
Android版百度地图的移动定位开发过程
一、准备工作
1、下载百度地图移动版API(Android版)开发包
开发包中包含两个文件:baidumapapi.jar和libBMapApiEngine.so
下载地址:http://dev.baidu.com/wiki/imap/index.php?title=Android%E5%B9%B3%E5%8F%B0/%E7%9B%B8%E5%85%B3%E4%B8%8B%E8%BD%BD
2、申请BaiduMapAPI Key(访问BaiduMap密钥)
申请地址:http://dev.baidu.com/wiki/imap/index.php?title=Android%E5%B9%B3%E5%8F%B0
3、创建一个Android工程
需要注意的是,与一般Android工程创建有所不同的是,需要额外做点工作,即先创建一个libs文件夹,然后将baidumapapi.jar和libBMapApiEngine.so两个文档分别拷贝libs目录及libs/armeabi目录下,并在工程属性->Java Build Path->Libraries中选择“Add JARs”,选定baidumapapi.jar,这样就可以在应用中使用百度地图API了。工程的目录结构如下图所示:
弄完上面的基础工作,我们就可以正式开始了
二、具体实施过程
1、在布局文件中添加Map控件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" ><!-- 添加Map控件 --> <com.baidu.mapapi.MapView android:id="@+id/map_View" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" /> </LinearLayout>
2、创建一个继承com.baidu.mapapi.MapActivity的类
package cn.whl.baidu.map;
import com.baidu.mapapi.BMapManager;import com.baidu.mapapi.GeoPoint;import com.baidu.mapapi.LocationListener;import com.baidu.mapapi.MKLocationManager;import com.baidu.mapapi.MapActivity;import com.baidu.mapapi.MapController;import com.baidu.mapapi.MapView;import com.baidu.mapapi.MyLocationOverlay;import android.location.Location;import android.os.Bundle;public class FirstActivity extends MapActivity {//属性//地图管理器对象private BMapManager mapManager;//地图控件private MapView mapView;//地图控件管理器private MapController mapController;//定位服务管理器对象private MKLocationManager mkLocationManager = null;//用于实时更新当前位置覆盖物private MyLocationOverlay myLocationOverlay; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); //实例化地图管理器对象mapManager =new BMapManager(getApplication());//初始化地图管理器对象mapManager.init("22FCFCD052AAAE640F34D608D98CDED68B0744A5", null);//开启地图管理器对象mapManager.start();//初始化Activitysuper.initMapActivity(mapManager);//根据id值找到对应的控件mapView= (MapView)findViewById(R.id.map_View);//设置启用内置的缩放控件mapView.setBuiltInZoomControls(true);//构造一个经纬度点GeoPoint point=new GeoPoint((int)(27*1E6), (int)(100*1E6));//取得地图控制器对象,用于控制mapViewmapController=mapView.getController();//设置地图的中心mapController.setCenter(point);//设置地图默认的缩放级别mapController.setZoom(4);//通过地图管理器对象得到定位服务管理器对象mkLocationManager=mapManager.getLocationManager();//注册位置更新事件监听器mkLocationManager.requestLocationUpdates(new LocationListener() {@Overridepublic void onLocationChanged(Location location) {// TODO Auto-generated method stubif(location!=null){//将当前位置转换成经纬点位置形式表示GeoPoint pt=new GeoPoint((int)(location.getLatitude()*1E6), (int)(location.getLongitude()*1E6));//将当前位置设置为地图中心mapController.setCenter(pt);}}});//使用GPS定位mkLocationManager.enableProvider(MKLocationManager.MK_GPS_PROVIDER);//获取当前位置覆盖物myLocationOverlay=new MyLocationOverlay(this, mapView);//注册GPS位置更新事件,让地图能实时显示当前位置myLocationOverlay.enableMyLocation();//开启磁场感应传感器(指南针)myLocationOverlay.enableCompass();//获取Overlay列表(list),然后在其中加入当前位置的OverlaymapView.getOverlays().add(myLocationOverlay); }@Overrideprotected boolean isRouteDisplayed() {// TODO Auto-generated method stubreturn false;}protected void onDestroy(){if(mapManager!=null){mapManager.destroy();mapManager=null;}super.onDestroy();}protected void onPause(){if(mapManager!=null){mapManager.stop();}super.onPause();}protected void onResume(){if(mapManager!=null){mapManager.start();}super.onResume();}}
3、配置AndroidManifest.xml相关设置
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="cn.whl.baidu.map" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".FirstActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <!-- 访问网络状态的权限 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 访问精确位置的权限 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 访问网络的权限 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 读写存储卡的权限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 访问WIFI网络状态的权限 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 改变WIFI网络状态的权限 --> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 读取电话状态的权限 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 添加Android支持 --> <supports-screens android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:resizeable="true" android:anyDensity="true"/> <uses-sdk android:minSdkVersion="3"></uses-sdk></manifest>
这样,就完成了,点击运行Android项目,发现不能显示移动定位点,这个目前还不知道其原因,不过我们可以把本项目的bin文件夹的*.apk(*代指项目名)文件安装到Android系统的手机上运行,手机上可以显示的。
更多相关文章
- Android(安卓)实现模拟地图定位功能
- [置顶] Android百度地图SDK 导航SDK2.0结合定位SDK6.0.5的导航参
- Android插件—H.A.X.M(硬件加速执行管理器)
- Android(安卓)通过高德地图获取地址的经纬度
- Android(安卓)解屏幕锁与点亮屏幕(来电时效果)
- android 手机项目集成高德地图的坑(小白请进)
- Android(安卓)Studio – 使用百度地图SDK教程
- Android实现任务管理器
- Android(安卓)百度地图经纬度转换成地址