1、百度开发Key的获取,声明一个接口,将该Key放进去
地址:
http://developer.baidu.com/map/android-mobile-apply-key.htm
百度开发者平台
申请Key教程
开发指南/配置教程
API Key:1A4A4ABEFBEECD8C17DEE880C4EA69B9607020B5
CanstantValue.java
package huaxa.it.map;
import android.R.string;
/** * @项目名: BaiduMap * @包名: huaxa.it.map * @类名: CanstantValue * @创建者: 黄夏莲 * @创建时间: 2016年11月28日 ,上午11:35:23 * * @描述: TODO */
public interface CanstantValue {
String KEY = "1A4A4ABEFBEECD8C17DEE880C4EA69B9607020B5";
}
2、添加引擎到Andoid工程中
添加jar包:baidumapapi_v2_1_2.jar和locSDK_3.1.jar
添加.so文件:拷贝libapp_BaiduMapApplib_v2_1_2.so、liblocSDK3.so、libvi_voslib.so到libs\armeabi目录下
注:liblocSDK3.so和locSDK_3.1.jar为百度定位SDK所使用资源,开发者可根据实际需求自行添加。
3、在Manifest.xml声明使用权限
声明使用权限
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
4、实现一个helloworld项目:
此处用到3个类:BMapManager 、MapView 、MapController
1. 实现布局。
2. 在setContentView()之前执行KEY校验。此中需要查看SDK的index.xml帮助文档,查看各个类的功能。
3. 实现缩放功能,添加缩放控件。
4. 设置地图中心点。
实现如下:
HelloWorld.java
package huaxa.it.map;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.MKEvent;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;
/** * @项目名: BaiduMap * @包名: huaxa.it.map * @类名: HelloWorld * @创建者: 黄夏莲 * @创建时间: 2016年11月28日 ,下午12:09:53 * * @描述: TODO */
public class HelloWorld extends Activity {
private BMapManager manager;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// KEY的校验
initManager();
setContentView(R.layout.common);
}
/** * 初始化地图引擎 */
private void initManager()
{
manager = new BMapManager(getApplicationContext());
/** * public boolean init(String strKey, MKGeneralListener listener) 参数: * strKey - 申请的授权验证码 listener - * 注册回调事件,该接口返回网络状态,授权验证等结果,用户需要实现该接口以处理相应事件 */
// KEY的校验
manager.init(CanstantValue.KEY, new MKGeneralListener()
{
//MKEvent存放常量
@Override
public void onGetPermissionState(int iError)
{
// TODO 授权验证
if(iError == MKEvent.ERROR_PERMISSION_DENIED)
{
Toast.makeText(getApplicationContext(), "授权验证失败", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onGetNetworkState(int iError)
{
// TODO 网络状态
if(iError == MKEvent.ERROR_NETWORK_CONNECT)
{
Toast.makeText(getApplicationContext(), "网络无连接", Toast.LENGTH_SHORT).show();
}
}
});
}
}
common.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >
<com.baidu.mapapi.map.MapView android:id="@+id/MapView" android:layout_width="match_parent" android:layout_height="match_parent" />
</LinearLayout>
Manifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="huaxa.it.map" android:versionCode="1" android:versionName="1.0" >
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14" />
<!-- gps -->
<!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" >
</uses-permission>
<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" >
</uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" >
</uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" >
</uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" >
</uses-permission>
<!-- 用于读取手机当前的状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" >
</uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" >
</uses-permission>
<!-- 访问网络,网络定位需要上网 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" >
</uses-permission>
<application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >
<!-- <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> -->
<activity android:name=".HelloWorld" android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
实现结果:校验失败:
改正方法:http://bbs.lbsyun.baidu.com/forum.php?mod=viewthread&tid=106461
实现效果:
实现缩放功能:
HelloWorld.java
package huaxa.it.map;
import com.baidu.mapapi.BMapManager;
import com.baidu.mapapi.MKGeneralListener;
import com.baidu.mapapi.map.MKEvent;
import com.baidu.mapapi.map.MapController;
import com.baidu.mapapi.map.MapView;
import com.baidu.platform.comapi.basestruct.GeoPoint;
import android.app.Activity;
import android.location.Geocoder;
import android.os.Bundle;
import android.widget.Toast;
/** * @项目名: BaiduMap * @包名: huaxa.it.map * @类名: HelloWorld * @创建者: 黄夏莲 * @创建时间: 2016年11月28日 ,下午12:09:53 * * @描述: TODO */
public class HelloWorld extends Activity {
private BMapManager manager;
private MapController controller;
private MapView mapView;
private int latitude = (int) (23.039 * 8E6);//经度
private int longitude = (int) (113.4042E6);//纬度
private GeoPoint geoPoint = new GeoPoint(latitude, longitude);//广东工业大学坐标
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// KEY的校验
initManager();
setContentView(R.layout.common);
init();
}
private void init()
{
// 地图的缩放级别(版本V2.X:3-19,V1.X:3-18级放大)
// V2.X与V1.X的主要区别:
// ①修改了地图文件的格式(节省了空间)
// ②放大级别,增加3D(18、19)的特效
// MapController管理某个具体的MapView,缩放、旋转、移动
mapView = (MapView) findViewById(R.id.MapView);
controller = mapView.getController();
controller.setZoom(12);// 设置地图的缩放级别。 这个值的取值范围是[3,19]。
mapView.setBuiltInZoomControls(true);// 设置是否启用内置的缩放控件。
// 如果启用,MapView将自动显示这些缩放控件。
controller.setCenter(geoPoint);//设置地图中心点
}
/** * 初始化地图引擎 */
private void initManager()
{
manager = new BMapManager(getApplicationContext());
/** * public boolean init(String strKey, MKGeneralListener listener) 参数: * strKey - 申请的授权验证码 listener - * 注册回调事件,该接口返回网络状态,授权验证等结果,用户需要实现该接口以处理相应事件 */
// KEY的校验
manager.init(CanstantValue.KEY, new MKGeneralListener()
{
// MKEvent存放常量
@Override
public void onGetPermissionState(int iError)
{
// TODO 授权验证
if (iError == MKEvent.ERROR_PERMISSION_DENIED)
{
Toast.makeText(getApplicationContext(),
"授权验证失败" + MKEvent.ERROR_PERMISSION_DENIED,
Toast.LENGTH_SHORT).show();
}
}
@Override
public void onGetNetworkState(int iError)
{
// TODO 网络状态
if (iError == MKEvent.ERROR_NETWORK_CONNECT)
{
Toast.makeText(getApplicationContext(), "网络无连接",
Toast.LENGTH_SHORT).show();
}
}
});
}
}