又开始学习安卓了,考虑到最近众多的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。再加上采用真机测试,错误莫名奇妙的就好了。。