sdk地址:
http://lbsyun.baidu.com/index.php?title=android-locsdk/geosdk-android-download
步骤:
1.控制台创建应用。
2.SHA1获得:
https://blog.csdn.net/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); } } } }