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控制台”,创建应用
Android百度定位获取经纬度_第1张图片
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

把坐标按照  经度,纬度  格式输入输入框,选择坐标反查,就可以查看定位是否准确。经度和纬度之间的逗号要使用英文

Android百度定位获取经纬度_第2张图片


更多相关文章

  1. 百度地图SDK for Android v2.1.3全新发布
  2. Android 开发环境下载地址 -- 百度网盘 adt-bundle android-stud
  3. Android开发_地图应用_百度Map-1
  4. Android Studio 调用百度地图
  5. Android基于tess-two的离线身份证等图片文字识别
  6. android 百度地图开发打包注意点
  7. #Android 使用User Location获取当前经纬度
  8. Android百度地图默认位置中心点设置
  9. Android文字转语音TTS离线程序

随机推荐

  1. 51cto春节假期客服放假安排
  2. CSS高级知识网格布局Grid常用属性
  3. 温暖
  4. js 中数组常用方法介绍以及 JSON 对象的
  5. 还有3天就过年了
  6. PHP基础:字符串函数的作用和练习
  7. 演示类的声明、实例化、静态成员扩展等,
  8. Java 生成随机数的 5 种方式,你知道几种?
  9. 使用原生 js 实现选项卡、一键更换背景图
  10. Jackson,最牛掰的 Java JSON 解析器