Android百度定位获取经纬度

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张图片


你可能感兴趣的:(Android)