百度定位出現經緯度值爲4.9E-324問題的解決過程

出現這個問題首先肯定已經添加了如下類似代碼了:

    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" />

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章