在开发Android项目中需要用到百度地图,对它比较陌生,之前没有接触过,以下写的是我对百度地图的认识,也是在工作中学习到的一点心得。
首先,给一些相关的资料,有了以下这些资料你就可以在Android平台上实现百度地图的功能啦。
现在,以一个简单的例子为开篇。
第一步:获取API Key
用户在使用API之前需要获取百度地图移动版API Key,该Key与你的百度帐户相关联,需要有百度帐户,才能获得API Key。并且,该Key与你引用API的程序名称有关。具体流程请参照获取密钥
第二步:把API添加到我的Android工程中
将下载好的“API开发包”解压,这里以百度地图移动版API(Android v1.3.3)为例,解压后里面有三个文件,将baidumapapi.jar文件拷贝到工程根目录,这样做的好处是当你打包Android应用时,会一块将baidumapapi.jar打包进你的应用中;将libBMapApiEngine_v1_3_3.so文件拷贝到工程根目录下的libs\armeabi目录中,必须放在要求的目录中。添加JAR包,在需要使用百度地图移动版API的工程中右击,选择build path -> configure build path... -> Libraries中选择“Add JARs...”,选定baidumapapi.jar,确定后返回,这样就可以在你的程序中使用API了,最后一个文件是文本文件,百度手机地图sdk使用简要说明.txt。
第三步:百度地图的“Hello,World”
在AndroidManifest.xml文件中添加使用权限以及Android版本支持:如下:
<uses-sdk android:minSdkVersion="3" />
<!-- 使用权限 -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!-- 版本支持 -->
<supports-screens android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:resizeable="true"
android:anyDensity="true"/>
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.location.Location;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.GeoPoint;
import com.baidu.mapapi.ItemizedOverlay;
import com.baidu.mapapi.LocationListener;
import com.baidu.mapapi.MKAddrInfo;
import com.baidu.mapapi.MKDrivingRouteResult;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.MKLocationManager;
import com.baidu.mapapi.MKPlanNode;
import com.baidu.mapapi.MKPoiResult;
import com.baidu.mapapi.MKSearch;
import com.baidu.mapapi.MKSearchListener;
import com.baidu.mapapi.MKTransitRouteResult;
import com.baidu.mapapi.MKWalkingRouteResult;
import com.baidu.mapapi.MKSuggestionResult;
import com.baidu.mapapi.MapActivity;
import com.baidu.mapapi.MapController;
import com.baidu.mapapi.MapView;
import com.baidu.mapapi.MyLocationOverlay;
import com.baidu.mapapi.Overlay;
import com.baidu.mapapi.OverlayItem;
import com.baidu.mapapi.PoiOverlay;
import com.baidu.mapapi.RouteOverlay;
import com.baidu.mapapi.TransitOverlay;
public class MyMapActivity extends MapActivity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
protected boolean isRouteDisplayed()
{
return false;
}
}
在布局xml中添加地图控件
<?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">
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="@string/hello" />
<com.baidu.mapapi.MapView android:id="@+id/bmapsView"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:clickable="true" />
</LinearLayout>
初始化地图Activity/使用key
在地图Activity中定义变量: BMapManager mBMapMan = null; 在onCreate方法中增加以下代码,并将您申请的Key替换“我的Key”:
mBMapMan = new BMapManager(getApplication());
mBMapMan.init("我的Key", null);
super.initMapActivity(mBMapMan);
MapView mMapView = (MapView) findViewById(R.id.bmapsView);
mMapView.setBuiltInZoomControls(true); //设置启用内置的缩放控件
MapController mMapController = mMapView.getController(); // 得到mMapView的控制权,可以用它控制和驱动平移和缩放
GeoPoint point = new GeoPoint((int) (39.915 * 1E6),
(int) (116.404 * 1E6)); //用给定的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)
mMapController.setCenter(point); //设置地图中心点
mMapController.setZoom(12); //设置地图zoom级别
Override以下方法,管理API:
@Override
protected void onDestroy()
{
if (mBMapMan != null)
{
mBMapMan.destroy();
mBMapMan = null;
}
super.onDestroy();
}
@Override
protected void onPause()
{
if (mBMapMan != null)
{
mBMapMan.stop();
}
super.onPause();
}
@Override
protected void onResume()
{
if (mBMapMan != null)
{
mBMapMan.start();
}
super.onResume();
}
完成上述步骤后,运行程序,结果如下: