android使用百度地图SDK获取定位信息

弱龄寄事外,委怀在琴书。这篇文章主要讲述android使用百度地图SDK获取定位信息相关的知识,希望能为你提供帮助。
本文使用android Studio开发。
获取定位信息相对简单, 我们只需要如下几步:
第一步, 注册百度账号, 在百度地图开放平台新建应用、生成API_KEY。这些就不细说了, 请前往这里: http://lbsyun.baidu.com/index.php?title= android-locsdk/guide/key
第二步, 下载sdk, 地址: http://lbsyun.baidu.com/index.php?title= android-locsdk/geosdk-android-download
第三步, 建立Android Studio工程( 略过不说) , 配置环境:
将解压后的文件放入libs文件夹下, 并在src/main下建立一个叫做jniLibs的文件夹, 并把解压后内的文件夹靠进去, 如下图:

android使用百度地图SDK获取定位信息

文章图片
android使用百度地图SDK获取定位信息

文章图片

第四步, 将BaiduLBS_Android.jar加入环境变量( 右键, Add As Library) , 并在app的build.gradle中的android中添加:
sourceSets { main { jniLibs.srcDirs = [' libs' ] } }

如图:
android使用百度地图SDK获取定位信息

文章图片

第五步, 在AndroidManifest.xml文件中声明权限:
< uses-permission android:name= " android.permission.INTERNET" /> < uses-permission android:name= " android.permission.ACCESS_WIFI_STATE" /> < uses-permission android:name= " android.permission.ACCESS_NETWORK_STATE" /> < !--网络定位--> < uses-permission android:name= " android.permission.ACCESS_COARSE_LOCATION" /> < !--GPS定位--> < uses-permission android:name= " android.permission.ACCESS_FINE_LOCATION" />

并在application标签中添加如下内容:
< meta-data android:name= " com.baidu.lbsapi.API_KEY" android:value= " 你申请的API key" /> < service android:name= " com.baidu.location.f" android:enabled= " true" android:process= " :remote" />

【android使用百度地图SDK获取定位信息】第六步, 测试代码, 获取定位信息:
public class MainActivity extends AppCompatActivity {public LocationClient mLocationClient = null; public BDLocationListener myListener = new MyLocationListener(); @ Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); startLocate(); }/** * 定位 */ private void startLocate() { mLocationClient = new LocationClient(getApplicationContext()); //声明LocationClient类 mLocationClient.registerLocationListener(myListener); //注册监听函数 LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationClientOption.LocationMode.Battery_Saving ); //可选, 默认高精度, 设置定位模式, 高精度, 低功耗, 仅设备 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有效时按照1S/1次频率输出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); //开启定位 mLocationClient.start(); }private class MyLocationListener implements BDLocationListener {@ Override public void onReceiveLocation(BDLocation 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.e(" 描述: " , sb.toString()); } }


    推荐阅读