工程创建完成后,将baidumapapi.jar和libBMapApiEngine.so分别拷贝到工程的根目录及libs/armeabi目录下,并在工程属性->Java Build Path->Libraries中选择“Add JARs”,选定baidumapapi.jar,这样就可以在应用中使用百度地图API了。工程完整的目录结构如下图所示:
说明:百度地图移动版api支持Android 1.5及以上系统,因此我们创建的工程应基于Android SDK 1.5及以上。
5)在布局文件中添加地图控件(res/layout/main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
</LinearLayout>
6)创建Activity继承com.baidu.mapapi.MapActivity
/*
* Copyright (C) 2015 Baidu, Inc. All Rights Reserved.
*/
package baidumapsdk.demo;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.VersionInfo;
public class BMapApiDemoMain extends Activity {
private static final String LTAG = BMapApiDemoMain.class.getSimpleName();
/**
* 构造广播监听类,监听 SDK key 验证以及网络异常广播
*/
public class SDKReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
String s = intent.getAction();
Log.d(LTAG, "action: " + s);
TextView text = (TextView) findViewById(R.id.text_Info);
text.setTextColor(Color.RED);
if (s.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR)) {
text.setText("key 验证出错! 请在 AndroidManifest.xml 文件中检查 key 设置");
} else if (s
.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK)) {
text.setText("key 验证成功! 功能可以正常使用");
text.setTextColor(Color.YELLOW);
}
else if (s
.equals(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR)) {
text.setText("网络出错");
}
}
}
private SDKReceiver mReceiver;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView text = (TextView) findViewById(R.id.text_Info);
text.setTextColor(Color.YELLOW);
text.setText("欢迎使用百度地图Android SDK v" + VersionInfo.getApiVersion());
ListView mListView = (ListView) findViewById(R.id.listView);
// 添加ListItem,设置事件响应
mListView.setAdapter(new DemoListAdapter());
mListView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View v, int index,
long arg3) {
onListItemClick(index);
}
});
// 注册 SDK 广播监听者
IntentFilter iFilter = new IntentFilter();
iFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_OK);
iFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);
iFilter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);
mReceiver = new SDKReceiver();
registerReceiver(mReceiver, iFilter);
}
void onListItemClick(int index) {
Intent intent = null;
intent = new Intent(BMapApiDemoMain.this, DEMOS[index].demoClass);
this.startActivity(intent);
}
private static final DemoInfo[] DEMOS = {
new DemoInfo(R.string.demo_title_basemap,
R.string.demo_desc_basemap, BaseMapDemo.class),
new DemoInfo(R.string.demo_title_map_fragment,
R.string.demo_desc_map_fragment, MapFragmentDemo.class),
new DemoInfo(R.string.demo_title_layers, R.string.demo_desc_layers,
LayersDemo.class),
new DemoInfo(R.string.demo_title_multimap,
R.string.demo_desc_multimap, MultiMapViewDemo.class),
new DemoInfo(R.string.demo_title_control,
R.string.demo_desc_control, MapControlDemo.class),
new DemoInfo(R.string.demo_title_ui, R.string.demo_desc_ui,
UISettingDemo.class),
new DemoInfo(R.string.demo_title_location,
R.string.demo_desc_location, LocationDemo.class),
new DemoInfo(R.string.demo_title_geometry,
R.string.demo_desc_geometry, GeometryDemo.class),
new DemoInfo(R.string.demo_title_overlay,
R.string.demo_desc_overlay, OverlayDemo.class),
new DemoInfo(R.string.demo_title_heatmap, R.string.demo_desc_heatmap,
HeatMapDemo.class),
new DemoInfo(R.string.demo_title_geocode,
R.string.demo_desc_geocode, GeoCoderDemo.class),
new DemoInfo(R.string.demo_title_poi, R.string.demo_desc_poi,
PoiSearchDemo.class),
new DemoInfo(R.string.demo_title_route, R.string.demo_desc_route,
RoutePlanDemo.class),
new DemoInfo(R.string.demo_title_districsearch,
R.string.demo_desc_districsearch,
DistrictSearchDemo.class),
new DemoInfo(R.string.demo_title_bus, R.string.demo_desc_bus,
BusLineSearchDemo.class),
new DemoInfo(R.string.demo_title_share, R.string.demo_desc_share,
ShareDemo.class),
new DemoInfo(R.string.demo_title_offline,
R.string.demo_desc_offline, OfflineDemo.class),
new DemoInfo(R.string.demo_title_radar,
R.string.demo_desc_radar, RadarDemo.class),
new DemoInfo(R.string.demo_title_open_baidumap, R.string.demo_desc_open_baidumap,
OpenBaiduMap.class),
new DemoInfo(R.string.demo_title_favorite,
R.string.demo_desc_favorite, FavoriteDemo.class),
new DemoInfo(R.string.demo_title_cloud, R.string.demo_desc_cloud,
CloudSearchDemo.class),
new DemoInfo(R.string.demo_title_opengl, R.string.demo_desc_opengl,
OpenglDemo.class),
new DemoInfo(R.string.demo_title_cluster, R.string.demo_desc_cluster, MarkerClusterDemo.class),
new DemoInfo(R.string.demo_title_tileoverlay, R.string.demo_desc_tileoverlay,
TileOverlayDemo.class),
new DemoInfo(R.string.demo_desc_texturemapview, R.string.demo_desc_texturemapview,
TextureMapViewDemo.class),
};
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
// 取消监听 SDK 广播
unregisterReceiver(mReceiver);
}
private class DemoListAdapter extends BaseAdapter {
public DemoListAdapter() {
super();
}
@Override
public View getView(int index, View convertView, ViewGroup parent) {
convertView = View.inflate(BMapApiDemoMain.this,
R.layout.demo_info_item, null);
TextView title = (TextView) convertView.findViewById(R.id.title);
TextView desc = (TextView) convertView.findViewById(R.id.desc);
title.setText(DEMOS[index].title);
desc.setText(DEMOS[index].desc);
if (index >= 16) {
title.setTextColor(Color.YELLOW);
}
return convertView;
}
@Override
public int getCount() {
return DEMOS.length;
}
@Override
public Object getItem(int index) {
return DEMOS[index];
}
@Override
public long getItemId(int id) {
return id;
}
}
private static class DemoInfo {
private final int title;
private final int desc;
private final Class<? extends Activity> demoClass;
public DemoInfo(int title, int desc,
Class<? extends Activity> demoClass) {
this.title = title;
this.desc = desc;
this.demoClass = demoClass;
}
}
}
7)在AndroidManifest.xml中配置
<?xml version="1.0" encoding="utf-8"?>
<!-- ~ Copyright (C) 2015 Baidu, Inc. All Rights Reserved. -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="baidumapsdk.demo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="7"
android:targetSdkVersion="10" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 用于读取手机当前的状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 访问网络,网络定位需要上网 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.GET_TASKS" />
<supports-screens
android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="false"
android:resizeable="true"
android:smallScreens="true" />
<application
android:name=".DemoApplication"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:hardwareAccelerated="true" >
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="Tp1NFhwWns02ozpePX9gWFau" />
<activity
android:name=".BMapApiDemoMain"
android:configChanges="orientation|keyboardHidden"
android:label="BaiduMapSDKDemo"
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".BaseMapDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_basemap"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".FragmentTableActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_basemap"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".MapFragmentDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_map_fragment"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".MultiMapViewDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_multimap"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".GeometryDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_geometry"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".RadarDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_radar"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".FavoriteDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_favorite"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".LocationDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_location"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".MapControlDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_control"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".UISettingDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_ui"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".LayersDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_layers"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".OverlayDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_overlay"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".OfflineDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_offline"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".PoiSearchDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_poi"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".RoutePlanDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_route"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".GeoCoderDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_geocode"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".BusLineSearchDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_bus"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".HeatMapDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_heatmap"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".ShareDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_share"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".ShareDemoActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_share"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".OpenBaiduMap"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_open_baidumap"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".CloudSearchActivity"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_cloud"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".CloudSearchDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/title_activity_cloud_search_demo"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".OpenglDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_opengl"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".TextureMapViewDemo"
android:screenOrientation="portrait"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_desc_texturemapview">
</activity>
<activity
android:name=".TileOverlayDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_tileoverlay"
android:screenOrientation="portrait" >
</activity>
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
<activity
android:name=".MarkerClusterDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/title_activity_marker_cluster_demo"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".DistrictSearchDemo"
android:configChanges="orientation|keyboardHidden"
android:label="@string/demo_name_districsearch"
android:screenOrientation="portrait">
</activity>
</application>
</manifest>
本文只是简单的展示了如何使用百度地图