android 百度sdk之 百度定位

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);
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_40803752/article/details/84874507