百度定位SDK Android v7.0 使用方法

    xiaoxiao2025-11-15  3

    徐州艾克峰网络科技 

    最近在徐州开发APP的时候遇到需要使用定位的情况。考虑到该APP的使用范围还是在国内GOOGLE的定位服务由于众所周知的原因不能使用。所以还是使用百度的吧。

    目前百度定位SDK已经升级到7.0了。使用过程大概如下。

    0.申请一个key

    1.引用相应的包

    2.开始定位。

    好了大家别打了,我知道这就像是要把大象装冰箱拢共分几步一样。下面我来详细的说一下每一步都是怎么做的。

    0.申请key

    0.0 去这个地址http://lbsyun.baidu.com/。点击申请秘钥回来到这样一个界面

    这里面最难填的是SHA1了。因为百度官方讲的也不是很详细。我就多啰嗦几句。

    我用的AS的环境。在 Android Studio下要想获得SHA1那么就必须要先给这个APP一个签名操作步骤如下:

    点击这个Generate Signed APK 到这个界面

    如果你程序从来没有过签名的话那么就点击Create New

    点击OK以后输入密码NEXT

    进入这一步了。刚才创建的签名所在的位置和编译的类型。这里有两个选项一个是debug一个是release 就是开发版和发布版的区别。记住你选择的选项,后面会用到。点击finish一般就成功签名了自己的APP了。好有成就感啊!感觉自己也是一个有身份证的人了!

    下面就是最重要的步骤了咱们要获取SHA1签名了。看看这个APP的身份证号是多少吧。

    在android studio的最下面有一个Terminal点一下就进入了神秘的命令行了。

    在里面找到你JRE的目录

    cd C:\Program Files\Java\jre7\bin 一般都是这么目录。看你安装到什么地方去了。

     

    然后你就输入这个命令。我故意切图的。你们试着自己敲一下。-keystore 后面是我的这个秘钥所放的位置。就是前面你们设置的位置。

    密钥库的口令默认是android

    然后你们就能看到一大段乱七八糟的东西

    找到SHA1这一行。把这一行复制一下。到目前为止我们就已经取到了签名的SHA1了。鼓掌!!!!!!!

    找到了SHA1以后就填到刚才申请百度定位SDK的KEY时需要填写的地方。你很聪明。有两行一个是发布版一个是开发版。还记得刚才让大家记住的debug和release吗?就是对应这里的发布版和开发版,都填上一样的吧,我反正是这么做的。点击提交!很好。你已经获取了自己的KEY了!徐州 APP 开发 艾克峰

    1.引用包

    获取KEY以后当然就要开始用咯。还是以Android Studio为例。因为百度定位SDK包含了很多的SO文件。那么在配置的时候需要让AS明白去哪引用。那么就需要添加如下代码

    找到这个位置点一下

    然后在android {}下面添加如下代码

    android{

    ...

    sourceSets { main() { jniLibs.srcDirs = ['libs'] } } ... } 完成as去哪找SO文件以后。把JAR包也拷贝进来引用。 然后设置AndroidManifest.xml

    在application标签中声明service组件,每个app拥有自己单独的定位service

    <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>

    设置AcessKey

    <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="key" /> //key:开发者申请的key 以上我们就把基本环境配置好了。下面我们开始写程序吧。 2.开始定位 在activity中我们需要做如下操作 public LocationClient mLocationClient = null; public BDLocationListener myListener = new MyLocationListener();   public void onCreate() { mLocationClient = new LocationClient(getApplicationContext()); //声明LocationClient类 mLocationClient.registerLocationListener( myListener ); //注册监听函数 initLocation(); //使用初始化 mLocationClient.start();开始定位 } private void initLocation(){ LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationMode.Hight_Accuracy );//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备 option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系 int span=1000; option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的 option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要 option.setOpenGps(true);//可选,默认false,设置是否使用gps option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果 option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近” option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到 option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死 option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集 option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要 mLocationClient.setLocOption(option); } public class MyLocationListener implements BDLocationListener {   @Override public void onReceiveLocation(BDLocation location) { //Receive Location StringBuffer sb = new StringBuffer(256); sb.append("time : "); sb.append(location.getTime()); sb.append("\nerror code : "); sb.append(location.getLocType()); sb.append("\nlatitude : "); sb.append(location.getLatitude()); sb.append("\nlontitude : "); sb.append(location.getLongitude()); sb.append("\nradius : "); sb.append(location.getRadius()); if (location.getLocType() == BDLocation.TypeGpsLocation){// GPS定位结果 sb.append("\nspeed : "); sb.append(location.getSpeed());// 单位:公里每小时 sb.append("\nsatellite : "); sb.append(location.getSatelliteNumber()); sb.append("\nheight : "); sb.append(location.getAltitude());// 单位:米 sb.append("\ndirection : "); sb.append(location.getDirection());// 单位度 sb.append("\naddr : "); sb.append(location.getAddrStr()); sb.append("\ndescribe : "); sb.append("gps定位成功");   } else if (location.getLocType() == BDLocation.TypeNetWorkLocation){// 网络定位结果 sb.append("\naddr : "); sb.append(location.getAddrStr()); //运营商信息 sb.append("\noperationers : "); sb.append(location.getOperators()); sb.append("\ndescribe : "); sb.append("网络定位成功"); } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果 sb.append("\ndescribe : "); sb.append("离线定位成功,离线定位结果也是有效的"); } else if (location.getLocType() == BDLocation.TypeServerError) { sb.append("\ndescribe : "); sb.append("服务端网络定位失败,可以反馈IMEI号和大体定位时间到loc-bugs@baidu.com,会有人追查原因"); } else if (location.getLocType() == BDLocation.TypeNetWorkException) { sb.append("\ndescribe : "); sb.append("网络不同导致定位失败,请检查网络是否通畅"); } else if (location.getLocType() == BDLocation.TypeCriteriaException) { sb.append("\ndescribe : "); sb.append("无法获取有效定位依据导致定位失败,一般是由于手机的原因,处于飞行模式下一般会造成这种结果,可以试着重启手机"); } sb.append("\nlocationdescribe : "); sb.append(location.getLocationDescribe());// 位置语义化信息 List<Poi> list = location.getPoiList();// POI数据 if (list != null) { sb.append("\npoilist size = : "); sb.append(list.size()); for (Poi p : list) { sb.append("\npoi= : "); sb.append(p.getId() + " " + p.getName() + " " + p.getRank()); } } Log.i("BaiduLocationApiDem", sb.toString()); }

    然后你们就会在LOG中看到自己的定位。是不是很神奇?

    转载请注明原文地址: https://ju.6miu.com/read-1304230.html
    最新回复(0)