又开始学习安卓了,考虑到最近众多的APP.均加入定位功能,就决定从百度地图开始学起。
一、从官网下载好百度地图API(http://developer.baidu.com/map/sdkandev-download.htm)点击打开链接,解压好,备用。如下图所示:
二、配置工程所需文件
1 、就是新建一个android 工程。将上述解压好的文件夹中的lib中的文件全部拷贝到工程中的lib包中。我新建的工程中自动添加有lib包,若是没有的需要新建lib包。完成后,效果如下图:
2、将上述选择三个Jar包,添加到工程中。具体命令为:选中--右键“Java Build Path ” -- “add ro Build Path ”,至此,所有的配置完成。
三、显示地图
1、在Manifest中添加使用权限及Android版本支持、屏幕支持;具体代码见下方:
<!-- 添加百度地图用户权限 --> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.USE_CREDENTIALS" /> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /> <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" /> <permission android:name="android.permission.BAIDU_LOCATION_SERVICE" > </permission> <uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" > </uses-permission> <uses-permission android:name="android.permission.INTERNET" > </uses-permission> <uses-permission android:name="android.permission.ACCES_MOCK_LOCATION" > </uses-permission> <!-- <uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission> --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" > </uses-permission> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.WAKE_LOCK" > </uses-permission> <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" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.SEND_SMS" /> <!-- SDK1.5需要android.permission.GET_TASKS权限判断本程序是否为当前运行的应用? --> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.CAMERA" > </uses-permission> <uses-permission android:name="android.permission.RECORD_AUDIO" > </uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" > </uses-permission> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <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> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <!-- 添加屏幕及版本支持 --> <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="false" android:resizeable="true" android:smallScreens="true" />2、 在布局xml文件中添加地图控件,如下:
<com.baidu.mapapi.map.MapView android:id="@+id/bmapsView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" />
3、在工程的MainActivity中添加相应的功能实现代码,如下:
import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.widget.Toast; import com.baidu.mapapi.BMapManager; import com.baidu.mapapi.MKGeneralListener; import com.baidu.mapapi.map.MapController; import com.baidu.mapapi.map.MapView; import com.baidu.platform.comapi.basestruct.GeoPoint; public class MyMapActivity extends Activity{ //地图引擎管理类 加载地图引擎 private BMapManager bMapManager = null ; private MapView mapView = null ; //添加百度地图的key 此处需替换为开发中自己申请的key private String keyString = "D298C0EFB220685DC5C6CA195FB2082264B0635F"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); bMapManager=new BMapManager(getApplication()); //加载必要的申请的key MKGeneralListener 监听授权的key 是否合法 bMapManager.init(keyString, new MKGeneralListener() { @Override public void onGetPermissionState(int arg0) { if (arg0 == 300) { Toast.makeText(MyMapActivity.this, "输入的key有错,请核实!", 1); } } @Override public void onGetNetworkState(int arg0) { // TODO Auto-generated method stub } }); //注意:请在试用setContentView前初始化BMapManager对象,否则会报错 setContentView(R.layout.activity_main); mapView=(MapView)findViewById(R.id.bmapsView); mapView.setBuiltInZoomControls(true); //设置启用内置的缩放控件 MapController mMapController = mapView.getController(); // 得到mMapView的控制权,可以用它控制和驱动平移和缩放 GeoPoint point =new GeoPoint((int)(39.915* 1E6),(int)(116.404* 1E6)); //用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6) mMapController.setCenter(point);//设置地图中心点 mMapController.setZoom(12);//设置地图zoom级别 //双击地图放大 mapView.setDoubleClickZooming(true); //显示卫星地图 mapView.setSatellite(true); } //重写以下方法。管理API @Override protected void onDestroy(){ mapView.destroy(); if(bMapManager!=null){ bMapManager.destroy(); bMapManager=null; } super.onDestroy(); } @Override protected void onPause(){ mapView.onPause(); if(bMapManager!=null){ bMapManager.stop(); } super.onPause(); } @Override protected void onResume(){ mapView.onResume(); if(bMapManager!=null){ bMapManager.start(); } super.onResume(); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); return true; } }4.运行百度地图,显示地图,如下:
至此,百度地图开发第一步实现百度地图的显示就完成了。在调试过程中,还曾遇到下面的问题:
java.lang.ClassNotFoundException: com.baidu.mapapi.map.MapView
用模拟器调试的时候总是报这个错,后来,经过不断的clean,refresh。再加上采用真机测试,错误莫名奇妙的就好了。。