1.下载地址:http://developer.baidu.com/map/index.php?title=android-locsdk/geosdk-android-download
官方文档:http://developer.baidu.com/map/index.php?title=android-locsdk
2.配置:
①key值的获取,在应用管理添加应用时根据提示填写即可,这里我只介绍安全码的获取。
安全码有三部分:Android签名的sha1 的值 + “;” + packageName 组成;
Android签名的sha1 值的获取有两种方式:
一、查看Eclipse获取,这个要求你的adt版本在22以上:
二、通过控制台获取,如图:
密匙库口令默认是android;
②把下面包复制到自己工程,如图:
③AndroidManifest.xml文件配置
一、权限:
注意: 定位SDKv3.1版本之后,以下权限已不需要,请取消声明,否则将由于Android 5.0多帐户系统加强权限管理而导致应用安装失败。 < uses-permission android:name="android.permission.BAIDU_LOCATION_SERVICE">
二、声明service组件,每个工程有单独的service,如下:
android:enabled="true"
android:process=":remote">
三、添加标签:
android:value="key" /> //key:开发者申请的key
3.类介绍及相关代码:package com.example.baidumapdemo;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;
import android.content.Context;
import android.widget.Toast;
public classBaiduMapLocationUtils implements BDLocationListener{
private static LocationClientmLocationClient;//定位客户端
private LocationClientOptionmLocationClientOption;
private Context context;
private StringcurrentCity = null;//当前所在城市
private boolean isFirLoc = true;//是否是第一次定位
private static BaiduMapLocationUtilsmLocationUtils;
private BaiduMapLocationUtils(Context context){
init(context);
}
public static BaiduMapLocationUtils getInstance(Context context){
if(mLocationUtils == null){
mLocationUtils = new BaiduMapLocationUtils(context);
mLocationClient.start();
}
return mLocationUtils;
}
/*** 初始化数据及定位相关
* @param context
*/
public void init(Context context){
this.context = context;
mLocationClient = new LocationClient(context);
mLocationClient.registerLocationListener(this);
mLocationClientOption = new LocationClientOption()
mLocationClientOption.setCoorType("bd09ll");//返回坐标类型
mLocationClientOption.setScanSpan(1000 * 1);//定位间隔时间
mLocationClientOption.setAddrType("all"); //是否需要地址信息,默认为false
mLocationClientOption.SetIgnoreCacheException(false); //可选,默认false,设置是否收集CRASH信息,默认收集
mLocationClientOption.setEnableSimulateGps(false); //可选,默认false,设置是否需要过滤gps仿真结果,默认需要
mLocationClientOption.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
mLocationClientOption.setOpenGps(true);//可选,默认false,设置是否使用gps
mLocationClientOption.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
mLocationClientOption.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京**附近”
mLocationClientOption.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
mLocationClientOption.setIgnoreKillProcess(false);//可选,默认false,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认杀死
mLocationClient.setLocOption(mLocationClientOption);
}
@Override
public void onReceiveLocation(BDLocation location) {
if(location == null || location.getCity() == null){
if(isFirLoc){
Toast.makeText(context, "定位失败,错误类型:" + BDLocation.TypeServerError, Toast.LENGTH_SHORT).show();
isFirLoc = false;
}
return;
}
if((currentCity == null && location.getCity() != null) ||
(location.getCity() != null && !location.getCity().equals(currentCity))){
currentCity = location.getCity();
Toast.makeText(context, "当前所在城市:" + currentCity, Toast.LENGTH_SHORT).show();
return;
}
}
public void onReceivePoi(BDLocation location) {
}
/*** 关闭定位功能
*/
public void onStop(){
mLocationClient.stop();
}
}
在这里类里我仅封装了定位部分,配置完成之后在onCreate里直接调用即可实现定位功能,我会稍后介绍在地图上标记位置。