AS作業之百度地圖

百度地圖:

emmm 首先聲明 這個代碼是有問題的。。。而且我最後都沒有找到問題出在哪 很奇怪怪 找了很久不斷有新的問題出現 也不斷髮現網上有新的說法。。。感情我成了百度鍊金石(?)

其次 功能都實現了 就是定位上一直出現偏差。。。較大偏差 文末會附上圖

接下來我就簡單說一下項目流程吧

配置環境和權限
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mybaidulcoate">

    <!--
         The ACCESS_COARSE/FINE_LOCATION permissions are not required to use
         Google Maps Android API v2, but you must specify either coarse or fine
         location permissions for the 'MyLocation' functionality.
    -->
    <!-- 這個權限用於進行網絡定位-->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
    <!-- 這個權限用於訪問GPS定位-->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
    <!-- 用於訪問wifi網絡信息,wifi信息會用於進行網絡定位-->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
    <!-- 獲取運營商信息,用於支持提供運營商信息相關的接口-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
    <!-- 這個權限用於獲取wifi的獲取權限,wifi信息會用來進行網絡定位-->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
    <!-- 用於讀取手機當前的狀態-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
    <!-- 寫入擴展存儲,向擴展卡寫入數據,用於寫入離線定位數據-->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
    <!-- 訪問網絡,網絡定位需要上網-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- SD卡讀取權限,用戶寫入離線定位數據-->

隨後就是java中的各種類的編寫,這裏不一一列舉了
我還是大概說一下流程:
首先要有一個類來使用監聽函數
然後還要一個類來定位SDK的參數(emmm 也是這裏問題最多了 不懂着實不懂 要是有想知道的 可以去看看這個視頻肖老師騰訊課堂
最後,咱們再整個接口類,把需要的什麼時間布拉布拉一股腦放進去 就OK了

放一點代碼吧
這是配置SDK的,能整出來靠的不是我。。。是同學情。。。

//配置定位SDK參數
    private void initLocation() {
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
        );//可選,默認高精度,設置定位模式,高精度,低功耗,僅設備
        option.setCoorType("bd09ll");//可選,默認gcj02,設置返回的定位結果座標系
        int span = 1000;
        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);
        option.setOpenGps(true); // 打開gps

        //可選,默認true,定位SDK內部是一個SERVICE,並放到了獨立進程,設置是否在stop的時候殺死這個進程,默認不殺死
        option.SetIgnoreCacheException(false);//可選,默認false,設置是否收集CRASH信息,默認收集
        option.setEnableSimulateGps(false);//可選,默認false,設置是否需要過濾GPS仿真結果,默認需要
        mLocationClient.setLocOption(option);
    }

    //實現BDLocationListener接口,BDLocationListener爲結果監聽接口,異步獲取定位結果
    public class MyLocationListener implements BDLocationListener {

        @Override
        public void onReceiveLocation(BDLocation location) {
            latLng = new LatLng(location.getLatitude(),location.getLongitude());
            // 構造定位數據
            MyLocationData locData = new MyLocationData.Builder()
                    .accuracy(location.getRadius())
                    // 此處設置開發者獲取到的方向信息,順時針0-360
                    .direction(100).latitude(location.getLatitude())
                    .longitude(location.getLongitude()).build();
            // 設置定位數據
            mBaiduMap.setMyLocationData(locData);
            // 當不需要定位圖層時關閉定位圖層
            //mBaiduMap.setMyLocationEnabled(false);
            if (isFirstLoc) {
                isFirstLoc = false;
                LatLng ll = new LatLng(location.getLatitude(),
                        location.getLongitude());
                MapStatus.Builder builder = new MapStatus.Builder();
                builder.target(ll).zoom(18.0f);
                mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));

                if (location.getLocType() == BDLocation.TypeGpsLocation) {
                    // GPS定位結果
                    Toast.makeText(MainActivity.this, location.getAddrStr(), Toast.LENGTH_SHORT).show();
                } else if (location.getLocType() == BDLocation.TypeNetWorkLocation) {
                    // 網絡定位結果
                    Toast.makeText(MainActivity.this, location.getAddrStr(), Toast.LENGTH_SHORT).show();

                } else if (location.getLocType() == BDLocation.TypeOffLineLocation) {
                    // 離線定位結果
                    Toast.makeText(MainActivity.this, location.getAddrStr(), Toast.LENGTH_SHORT).show();

                } else if (location.getLocType() == BDLocation.TypeServerError) {
                    Toast.makeText(MainActivity.this, "服務器錯誤,請檢查", Toast.LENGTH_SHORT).show();
                } else if (location.getLocType() == BDLocation.TypeNetWorkException) {
                    Toast.makeText(MainActivity.this, "網絡錯誤,請檢查", Toast.LENGTH_SHORT).show();
                } else if (location.getLocType() == BDLocation.TypeCriteriaException) {
                    Toast.makeText(MainActivity.this, "手機模式錯誤,請檢查是否飛行", Toast.LENGTH_SHORT).show();
                }
            }
        }
    }

然後叨叨一下遇到的問題吧
最開始我以爲是我的虛擬機配置問題
可能部分人也會真的是這麼一個問題
如果真的是的話 大家可以在創建SDK的時候在這裏瞅瞅
因爲時間太久遠了,我也忘記具體的了。很早之前我在另一個項目中遇到過因爲定位開啓一直報錯 找過來關掉了
在這裏插入圖片描述

隨後我又以爲是SDK的問題。。。
不必多說 重裝SDK

然而
還是報錯。。。
我循着報錯找到了這個。。。
在這裏插入圖片描述
在這裏插入圖片描述
我。。。太難了
最後是什麼問題咱也不知道 咱也不敢問

運行是沒有任何問題 但是
在這裏插入圖片描述
它會這麼提示我,機智的小夥伴會看到小面說飛行模式的問題 這裏統一說明 我必然是開了手機的定位功能的

我看了看定位位置
在這裏插入圖片描述
行吧。。。,我是一個海王。。。
溜了溜了

最後附上源碼源碼

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