刚学完android,决定来个小小应用。做什么呢?之前在公司看人家用ios做的地图不错,干脆我就做个android版吧。

百度了一下它的api,很简单。花了半天解决。首先新建一个工程,然后把baidumapapi.jar拷贝到工程下的lib文件夹里,同时在里面建一个文件夹armeabi,再把libBMapApiEngine_v1_3_3.so动态库文件拷进去,打开eclipse,右键点击工程的Properties,进入Java Build Path,打开Libraries,点击Add External JARS,把baidumapapi.jar添加进去,ok,配置好了。

自定义一个Aplication类,WhereMapApplication,继承自Application(拷贝自官方百度):

public class WhereMapApplication extends Application {static WhereMapApplication mDemoApp;//百度MapAPI的管理类BMapManager mBMapMan = null;// 授权Key// TODO: 请输入您的Key,// 申请地址:http://dev.baidu.com/wiki/static/imap/key/String mStrKey = "申请的KEY值";boolean m_bKeyRight = true;// 授权Key正确,验证通过// 常用事件监听,用来处理通常的网络错误,授权验证错误等static class MyGeneralListener implements MKGeneralListener {@Overridepublic void onGetNetworkState(int iError) {Log.d("MyGeneralListener", "onGetNetworkState error is "+ iError);Toast.makeText(WhereMapApplication.mDemoApp.getApplicationContext(), "您的网络出错啦!",Toast.LENGTH_LONG).show();}@Overridepublic void onGetPermissionState(int iError) {Log.d("MyGeneralListener", "onGetPermissionState error is "+ iError);if (iError ==  MKEvent.ERROR_PERMISSION_DENIED) {// 授权Key错误:Toast.makeText(WhereMapApplication.mDemoApp.getApplicationContext(), "请在BMapApiDemoApp.java文件输入正确的授权Key!",Toast.LENGTH_LONG).show();WhereMapApplication.mDemoApp.m_bKeyRight = false;}}}@Override    public void onCreate() {Log.v("BMapApiDemoApp", "onCreate");mDemoApp = this;mBMapMan = new BMapManager(this);mBMapMan.init(this.mStrKey, new MyGeneralListener());mBMapMan.getLocationManager().setNotifyInternal(10, 5);//if (mBMapMan != null) {//mBMapMan.destroy();//mBMapMan = null;//}super.onCreate();}@Override//建议在您app的退出之前调用mapadpi的destroy()函数,避免重复初始化带来的时间消耗public void onTerminate() {// TODO Auto-generated method stubif (mBMapMan != null) {mBMapMan.destroy();mBMapMan = null;}super.onTerminate();}}

百度API地址: http://dev.baidu.com/wiki/static/index.htm

百度申请key地址:http://dev.baidu.com/wiki/static/imap/key/
注册百度用户,再申请key值,把key值替换以上代码中的"申请的KEY值"。

修改AndroidManifest.xml文件中application的属性,添加android:name=".WhereMapApplication"如下:

<application        android:name=".WhereMapApplication"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name" >

并且在之前添加,如果加在最后有可能会有警告产生:

<uses-sdk        android:minSdkVersion="3" />    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >    </uses-permission>    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >    </uses-permission>    <uses-permission android:name="android.permission.INTERNET" >    </uses-permission>    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >    </uses-permission>    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >    </uses-permission>    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >    </uses-permission>    <uses-permission android:name="android.permission.READ_PHONE_STATE" >    </uses-permission>    <supports-screens        android:anyDensity="true"        android:largeScreens="true"        android:normalScreens="true"        android:resizeable="true"        android:smallScreens="true" />


如果想使用在activity里面,就需要新建一个自定义的activity继承自MapActivity。我创建了一个MainActivity,如下:

public class MainActivity extends MapActivity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        WhereMapApplication app = (WhereMapApplication)this.getApplication();if (app.mBMapMan == null) {app.mBMapMan = new BMapManager(getApplication());app.mBMapMan.init(app.mStrKey, new WhereMapApplication.MyGeneralListener());}app.mBMapMan.start();// 如果使用地图SDK,请初始化地图Activity//long iTime = System.nanoTime();        super.initMapActivity(app.mBMapMan);//        iTime = System.nanoTime() - iTime;//        Log.d("MapViewDemo", "the init time is  " + iTime);        MapView mapView = (MapView)findViewById(R.id.bmapView);        mapView.setBuiltInZoomControls(true);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.activity_main, menu);        return true;    }@Overrideprotected boolean isRouteDisplayed() {// TODO Auto-generated method stubreturn false;}@Overrideprotected void onPause() {WhereMapApplication app = (WhereMapApplication)this.getApplication();if(app.mBMapMan != null )app.mBMapMan.stop();super.onPause();}@Overrideprotected void onResume() {WhereMapApplication app = (WhereMapApplication)this.getApplication();app.mBMapMan.start();super.onResume();}}

BMapManager在application中new之后,使用init初始化之后,在需要的activity里面使用start,stop就可以控制map的显示和关闭:

public class MainActivity extends MapActivity {    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        WhereMapApplication app = (WhereMapApplication)this.getApplication();if (app.mBMapMan == null) {app.mBMapMan = new BMapManager(getApplication());app.mBMapMan.init(app.mStrKey, new WhereMapApplication.MyGeneralListener());}app.mBMapMan.start();// 如果使用地图SDK,请初始化地图Activity//long iTime = System.nanoTime();        super.initMapActivity(app.mBMapMan);//        iTime = System.nanoTime() - iTime;//        Log.d("MapViewDemo", "the init time is  " + iTime);        MapView mapView = (MapView)findViewById(R.id.bmapView);        mapView.setBuiltInZoomControls(true);    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.activity_main, menu);        return true;    }@Overrideprotected boolean isRouteDisplayed() {// TODO Auto-generated method stubreturn false;}@Overrideprotected void onPause() {WhereMapApplication app = (WhereMapApplication)this.getApplication();if(app.mBMapMan != null )app.mBMapMan.stop();super.onPause();}@Overrideprotected void onResume() {WhereMapApplication app = (WhereMapApplication)this.getApplication();app.mBMapMan.start();super.onResume();}}

这个时候已经能显示出地图了,不过是在模拟器上测试的,没有真机,只能先写在这里了。其余如打点,搜索等功能在官方代码中均有详细说明,就不一一描述了。


更多相关文章

  1. android kernel控制台初始化过程
  2. Android之Volley框架在实际开发过程中运用
  3. Android启动流程简析(一)
  4. 如何成为一个偷懒又高效的Android开发人员
  5. Android集成百度地图SDK步骤
  6. Android自定义动画学习,实现左右摇摆动画
  7. android关机充电的奥妙所在(留着以后用)
  8. android 休眠唤醒机制分析(一) — wake_lock
  9. Android地图中根据缩放级别显示Marker

随机推荐

  1. Linux上杀死eclipse进程
  2. 用vs2015开发Android靠谱吗
  3. Android笔记(9)---Fragment的生命周期以及
  4. Android4.X物理按键监听
  5. Android VR入门文章
  6. Android Handler处理机制 ( 一 )(图+源码
  7. (转)当Note2遇上NFC
  8. 美女开发者独立开发二十多款应用,月入上万
  9. 在截击中从响应中获得头球
  10. Android实战技巧之十一:Android Studio和G