1、下载百度定位jar包;
2、申请密钥;
3、集成项目;
4、实现定位。
1、从 http://developer.baidu.com/map/index.php?title=android-locsdk/geosdk-android-download
下载需要的jar包,以及实例代码 BaiduLBS_AndroidSDK_Sample
2、申请密钥:
项目keystore文件,获取sha1内容:
keytool -list -v -keystore e:\dpm.keystore
详情,见http://developer.baidu.com/map/index.php?title=androidsdk/guide/key
3、集成项目;
参考demo,将manifest中文件,jar包,集成到项目中,配置好密钥。
4、实现定位:
在application的oncreate初始化百度定位的相关参数:
public static Context appContext;
//定位
public static LocationClient mLocationClient;
//定位监听
public MyLocationListener mMyLocationListener;
public static Activity currentActivity;
public static boolean isActived=false;
public static int point=0;
@Override
public void onCreate() {
super.onCreate();
appContext = getApplicationContext();
SDKInitializer.initialize(this);
initLocation();
mMyLocationListener = new MyLocationListener();
mLocationClient.registerLocationListener(mMyLocationListener);
}
private void initLocation(){
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationMode.Hight_Accuracy);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
option.setCoorType("bd09ll");//百度标准坐标,默认gcj02,设置返回的定位结果坐标系,
option.setScanSpan(5000);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
option.setOpenGps(true);//可选,默认false,设置是否使用gps
option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
option.setIgnoreKillProcess(true);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要
option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
mLocationClient.setLocOption(option);
}
/**
*
* TODO(自定义监听器)
* <p style="display:none">modifyRecord</p>
* <p style="display:none">version:V1.0,author:sjyuan,date:Sep 23, 2014 11:59:59 AM,content:TODO </p>
* @author sjyuan
* @date Sep 23, 2014 11:59:59 AM
* @since
* @version
*
*
*/
public class MyLocationListener implements BDLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
// Receive Location
mLocationClient.stop();
if (location == null)
return;
//本地保存位置信息
AppConfig config = AppConfig.sharedInstance();
config.Latitude = location.getLatitude();
config.Longitude = location.getLongitude();
config.Address = location.getAddrStr();
config.saveToPreference();
try {
<span style="white-space:pre"> </span>if(location.getLatitude()==4.9E-324 || location.getLongitude()==4.9E-324){
<span style="white-space:pre"> </span>//定位失败
<span style="white-space:pre"> </span>}else{
<span style="white-space:pre"> </span>//定位成功
<pre name="code" class="java">//本地逻辑实现; 可以在application中,设置handler变量,在使用的地方设置传入handler,进行定位,在此处定位成功后,发送消息,在使用的地方进行处理,
使用经纬度,再将handler置为null,或者你发广播也可以;也可以在此application中,存一些全局变量来控制逻辑部分。
<span style="white-space:pre"> </span>}
} catch (Exception e) {
}
}
}
使用部分,获取到Application变量,比如上文类为App,则
(App)getApplicationContext().<span style="font-family: Arial, Helvetica, sans-serif;">mLocationClient.start();</span>
<span style="font-family: Arial, Helvetica, sans-serif;">之后处理定位成功逻辑即可。</span>