Android如何使用百度地图

来源:互联网 发布:逆战绝无情辅助源码 编辑:程序博客网 时间:2024/06/14 00:17

   刚学完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();}}

 

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


原创粉丝点击