百度定位出现经纬度值为4.9E-324问题的解决过程

本文介绍了解决百度定位SDK中错误码162(so文件加载失败)的方法,包括重新下载完整SDK和在build.gradle中指定CPU架构平台。同时提供了获取SHA1码的cmd命令和AndroidManifest.xml配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

出现这个问题首先肯定已经添加了如下类似代码了:

    private String mLongitude = "";
    private String mLatitude = "";
    private String mAddress = "";

    private LocationClient mLocationClient;
    
    private void initLocation() {
        //http://lbsyun.baidu.com/apiconsole/key——获取APP_KEY的网址
        mLocationClient = new LocationClient(getApplicationContext());
        mLocationClient.registerLocationListener(new MyLocationListener());
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//可选,设置定位模式,默认高精度
        option.setCoorType("bd09ll");//bd09ll:百度经纬度坐标;
        option.setScanSpan(1000);//如果设置为0,则代表单次定位,即仅定位一次,默认为0,如果设置非0,需设置1000ms以上才有效
        option.setOpenGps(true);//可选,设置是否使用gps,默认false,使用高精度和仅用设备两种定位模式的,参数必须设置为true
        option.setLocationNotify(true);//可选,设置是否当GPS有效时按照1S/1次频率输出GPS结果,默认false
        option.setIgnoreKillProcess(true);//可选,定位SDK内部是一个service,并放到了独立进程。//设置是否在stop的时候杀死这个进程,默认(建议)不杀死,即setIgnoreKillProcess(true)
        option.SetIgnoreCacheException(false);//可选,设置是否收集Crash信息,默认收集,即参数为false
        option.setWifiCacheTimeOut(5 * 60 * 1000);//可选,7.2版本新增能力//如果设置了该接口,首次启动定位时,会先判断当前WiFi是否超出有效期,若超出有效期,会先重新扫描WiFi,然后定位
        option.setEnableSimulateGps(false);//可选,设置是否需要过滤GPS仿真结果,默认需要,即参数为false
        option.setIsNeedAddress(true);//可选,是否需要地址信息,默认为不需要,即参数为false//如果开发者需要获得当前点的地址信息,此处必须为true

        mLocationClient.setLocOption(option);
        mLocationClient.start();
    }
    
    public class MyLocationListener extends BDAbstractLocationListener {
        @Override
        public void onReceiveLocation(BDLocation location) {
            double latitude = location.getLatitude();    //获取纬度信息24.488628
            double longitude = location.getLongitude();    //获取经度信息118.181043
            float radius = location.getRadius();    //获取定位精度,默认值为0.0f

            mLatitude = String.valueOf(latitude);
            mLongitude = String.valueOf(longitude);

            //获取经纬度坐标类型,以LocationClientOption中设置过的坐标类型为准
            String coorType = location.getCoorType();
            
            //获取定位类型、定位错误返回码,具体信息可参照类参考中BDLocation类中的说明
            int errorCode = location.getLocType();
            mAddress = location.getAddrStr();    //获取详细地址信息 
            String country = location.getCountry();    //获取国家
            String province = location.getProvince();    //获取省份
            String city = location.getCity();    //获取城市
            String district = location.getDistrict();    //获取区县
            String street = location.getStreet();    //获取街道信息
            mLocationClient.stop();
    }

可以通过int errorCode = location.getLocType();查看错误代码,我的错误码是162,查看错误码说明:

http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/addition-func/error-code

162对应的解释是so文件加载失败,于是我检查了自己的so文件,是从其他项目拷过来的,只有armeabi平台,可是为什么另一个项目就没问题呢,明明一模一样的。我又解压了apk查看里面的libs,发现竟然有多个不同平台的目录,原来是项目中用了一个第三方框架,这个框架含有多个平台的so目录,于是造成了这个问题。现在知道解决办法了:

方法一:重新下载百度sdk,把全部的平台目录什么arm64-v8a,armeabi,armeabi-v7a,x86,x86_64全部拷到项目当中;

下载地址:http://lbsyun.baidu.com/index.php?title=sdk/download&action#selected=location_all

方法二:在build.gradle中指定CPU架构平台,比如:

    defaultConfig {
        ......

        ndk{
            abiFilter("armeabi")
        }
    }

这样打包出来的libs当中就只有armeabi目录了

 

顺便记录下如何获取SHA1码:

cmd命令:keytool -list -v -keystore带上keystore或jks的路径,输入密钥就能获取到了

 

再记录下AndroidManifest.xml配置吧,百度定位需要的准备就这么多了

    <!-- 百度地图 -->
    <!-- 这个权限用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <!-- 这个权限用于访问GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <!-- 用于读取手机当前的状态-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!-- SD卡读取权限,用户写入离线定位数据-->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />

            <!-- 百度地图 -->
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="my_api_key" />
        <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" />

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值