sdk地址:
http://lbsyun.baidu.com/index.php?title=android-locsdk/geosdk-android-download
步骤:
1.控制台创建应用。

2.SHA1获得:
https://blog.youkuaiyun.com/cc20032706/article/details/77528978.
注意:debug 版本和release不同。
debug版本获取:
首先:到c/user/../.android目录下,
我的是:C:\Users\admin\.android
其次:在这个目录下,用cmd.输入keytool -v -list -keystore debug.keystore

debug版本只要电脑不换就一样的,所以保存下来。
我的是: 1B:7E:D7:A6:D0:F7:76:74:9C:41:1D:AD:60:77:5D:2C:16:A1:AF:6F
包名: 在app 模块moulde下,build.grald 的
applicationId "com.example.admin.hulinyuan"
3.把sdk对应的 jar ,so文件放入项目 的libs 目录下。或者新建 jnilibs放入so文件,然后配置
jniLibs.srcDirs = ['jnilibs']。
我放置的文件目录是libs (左)和 build 配置

第四步,在AndroidManifest.xml下添加AK
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="AK" >
</meta-data
第五步,添加定位权限和 服务
服务:
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> </service>
权限:
!-- 这个权限用于进行网络定位--> <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>
开始使用sdk。我这里封装了一道,后面直接把 封装类给出来
1.初始化请求头
2.start
3.restart
4.注意有时候不一定获得定位位置,所以判断下获得的参数
public class BaiDuLocationUtils {
public LocationClient mLocationClient = null;
private MyLocationListener myListener ;
public BaiDuLocationUtils(Context mContext,GPSUtils.Satellites infalistener) {
mLocationClient = new LocationClient(mContext);
myListener = new MyLocationListener(mContext,infalistener);
mLocationClient.registerLocationListener(myListener);
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
option.setCoorType("bd09ll");
option.setScanSpan(0);
option.setOpenGps(true);
option.setLocationNotify(true);
//可选,设置是否当GPS有效时按照1S/1次频率输出GPS结果,默认false
option.setIgnoreKillProcess(true);
//可选,定位SDK内部是一个service,并放到了独立进程。
//设置是否在stop的时候杀死这个进程,默认(建议)不杀死,即setIgnoreKillProcess(true)
option.SetIgnoreCacheException(false);
//可选,设置是否收集Crash信息,默认收集,即参数为false
option.setWifiCacheTimeOut(5*60*1000);
//可选,V7.2版本新增能力
//如果设置了该接口,首次启动定位时,会先判断当前Wi-Fi是否超出有效期,若超出有效期,会先重新扫描Wi-Fi,然后定位
option.setEnableSimulateGps(false);
//可选,设置是否需要过滤GPS仿真结果,默认需要,即参数为false
mLocationClient.setLocOption(option);
//requestLocation
// mLocationClient.requestLocation()
}
public void star(){
// MyLocationListener myLocationListener = new MyLocationListener(mContext,infalistener);
// mLocationClient.registerLocationListener(myLocationListener);
mLocationClient.start();
}
public void restart(){
mLocationClient.restart();
}
public class MyLocationListener extends BDAbstractLocationListener {
GPSUtils.Satellites infalistener;
Context mContext;
public MyLocationListener(Context mContext,GPSUtils.Satellites infalistener ) {
this.infalistener = infalistener;
this.mContext = mContext;
}
@Override
public void onReceiveLocation(BDLocation bdLocation){
mLocationClient.stop();
Location location = new Location("");
double latitude = bdLocation.getLatitude();
double longitude = bdLocation.getLongitude();
if (!String.valueOf(latitude).contains(".") ||String.valueOf(latitude).contains("E")){
// infalistener.getOnetimeLocation(null,GPSUtils.GCJ02);
//再定位一次
// Tools.toast(mContext,"请重新定位!");
} else {
location.setLatitude(latitude);
location.setLongitude(longitude);
location.setAltitude(bdLocation.getAltitude());
location.setAccuracy(bdLocation.getRadius());
//我这里是把返回的值通过接口传出去。因为我还用到gps,封装一道 代码好控制
infalistener.getOnetimeLocation(location,GPSUtils.GCJ02);
}
}
}
}
本文详细介绍了如何在Android项目中集成百度SDK进行定位。步骤包括在百度控制台创建应用,获取SHA1指纹(区分debug和release),将SDK的jar和so文件放入项目库,更新AndroidManifest.xml添加AK和所需权限,以及启动和管理定位服务。同时提到了定位结果可能需要判断有效性。
537

被折叠的 条评论
为什么被折叠?



