Android百度定位获取经纬度
16lz
2021-01-23
Android百度定位获取经纬度
一、百度定位误差问题:参考一片文章
http://blog.csdn.net/shaoyezhangliwei/article/details/44830301
1.基站精度为平均200米左右(100-300米),视运营商基站覆盖范围而定。
2.WIFI精度为100米左右(30-200米)。
3.GPS精度为10米左右(取决于手机芯片),比较费电,且在室内不可用。
a.“Htc one”:GPS误差1-3米
b.“htc t328w”“红米1s”“联想”:GPS误差15-30米
c.三星:GPS误差200米,稳定后也是80米左右
二、百度定位开发
1.进入百度地图开发平台: http://lbsyun.baidu.com/ 注册
2.认证为开发者
3.进入“API控制台”,创建应用
4.根据提示填入,获取百度地图开发AK
5.在“开发”--“Android定位SDK”-- “相关下载”-- “全部下载”或者“一键下载”,下载so文件和jar文件
6.将jar文件放入项目的libs文件夹下,在libs文件夹下新建armeabi文件夹,并将so文件放入armeabi文件夹下。
注:之前把armeabi -- so文件放在了src - jniLibs文件夹下,导致162,获取到 的经纬度4.9e-324
如果没有给予权限会出现62错误,手机处于飞行模式
7.在项目的build.gradle文件中添加如下代码
8.在清单文件中添加如下代码
9.编写定位监听
11.获取到经纬度之后,在百度地图上验证,输入地址:
http://api.map.baidu.com/lbsapi/getpoint/index.html
一、百度定位误差问题:参考一片文章
http://blog.csdn.net/shaoyezhangliwei/article/details/44830301
1.基站精度为平均200米左右(100-300米),视运营商基站覆盖范围而定。
2.WIFI精度为100米左右(30-200米)。
3.GPS精度为10米左右(取决于手机芯片),比较费电,且在室内不可用。
a.“Htc one”:GPS误差1-3米
b.“htc t328w”“红米1s”“联想”:GPS误差15-30米
c.三星:GPS误差200米,稳定后也是80米左右
二、百度定位开发
1.进入百度地图开发平台: http://lbsyun.baidu.com/ 注册
2.认证为开发者
3.进入“API控制台”,创建应用
4.根据提示填入,获取百度地图开发AK
5.在“开发”--“Android定位SDK”-- “相关下载”-- “全部下载”或者“一键下载”,下载so文件和jar文件
6.将jar文件放入项目的libs文件夹下,在libs文件夹下新建armeabi文件夹,并将so文件放入armeabi文件夹下。
注:之前把armeabi -- so文件放在了src - jniLibs文件夹下,导致162,获取到 的经纬度4.9e-324
如果没有给予权限会出现62错误,手机处于飞行模式
7.在项目的build.gradle文件中添加如下代码
android { sourceSets { main { jniLibs.srcDirs = ['libs'] } }}
dependencies { compile files('libs/BaiduLBS_Android.jar')}
8.在清单文件中添加如下代码
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/><uses-permission android:name="android.permission.READ_PHONE_STATE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/><meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="DuPAZpXdWDDQ9PIhtZZypyyMxkrHNqxz" /><service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">service>
9.编写定位监听
public class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { Log.e("LKing","定位type = "+location.getLocType()); Log.e("LKing","定位时间 = "+location.getTime()); Log.e("LKing","定位纬度 = "+location.getLatitude()); Log.e("LKing","定位经度 = "+location.getLongitude()); Log.e("LKing","定位精准度 = "+location.getRadius()); if (location.getLocType() == BDLocation.TypeGpsLocation) {// GPS定位结果 Log.e("LKing","当前为GPS定位--------------"); } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {// 网络定位结果 Log.e("LKing","当前为网络定位--------------"); } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {// 离线定位结果 Log.e("LKing","当前为离线定位--------------"); } else if (location.getLocType() == BDLocation.TypeServerError) { Log.e("LKing","当前定位失败--------------"); } else if (location.getLocType() == BDLocation.TypeNetWorkException) { Log.e("LKing","当前网络不通--------------"); } else if (location.getLocType() == BDLocation.TypeCriteriaException) { Log.e("LKing","当前为手机处于飞行模式,可以试着重启手机--------------"); } }}
10.开始获取定位信息
/** 百度定位获取*/public LocationClient mLocationClient = null;public BDLocationListener myListener = new MyLocationListener();
/** * 定位 */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 = 5000; 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();}
11.获取到经纬度之后,在百度地图上验证,输入地址:
http://api.map.baidu.com/lbsapi/getpoint/index.html
把坐标按照 经度,纬度 格式输入输入框,选择坐标反查,就可以查看定位是否准确。经度和纬度之间的逗号要使用英文
更多相关文章
- 百度地图SDK for Android v2.1.3全新发布
- Android 开发环境下载地址 -- 百度网盘 adt-bundle android-stud
- Android开发_地图应用_百度Map-1
- Android Studio 调用百度地图
- Android基于tess-two的离线身份证等图片文字识别
- android 百度地图开发打包注意点
- #Android 使用User Location获取当前经纬度
- Android百度地图默认位置中心点设置
- Android文字转语音TTS离线程序