百度地圖定位

首先最重要的當然是去官方下載相關的sdk文件,以及導入的項目中。再申請祕鑰,不同APP不同的祕鑰。這裏不再做詳細描述了。

  • 當導入包以後,就是配置AndroidManifest.xml文件了,首先是需要相關權限,然後配置祕鑰。
    <uses-permission android:name="android.permission.INTERNET" />
    <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_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.READ_LOGS" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  • 還有註冊百度服務
        <service
            android:name="com.baidu.location.f"
            android:enabled="true"
            android:process=":remote" >
            <intent-filter>
                <action android:name="com.baidu.location.service_v2.2" >
                </action>
            </intent-filter>
        </service>
  • 別忘了還要配置祕鑰
       <!-- meta-data需要寫在application中 -->
        <meta-data
            android:name="com.baidu.lbsapi.API_KEY"
            android:value="這裏填寫你從百度地圖官網申請到的祕鑰" />
  • 等導完包、配置完AndroidManifest.xml文件後就是進行代碼的定位了

    重中之中,需要在Activity綁定頁面,也就是setContentView(R.layout.main);之前需要對百度sdk
    進行註冊,就是SDKInitializer.initialize(getApplicationContext());這麼一行代碼,否則會報錯。

  • 接下來就需要實例化百度地圖定位非常關鍵的一個類LocationClient。

LocationClient mlocationClient = new LocationClient(getApplicationContext());
  • 再使用LocationClientOption類對LocationClient進行一些屬性的配置
LocationClientOption option = new LocationClientOption();
option.setLocationMode(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有效時按照1S1次頻率輸出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);//添加設置
  • 最後就是定位的監聽Listener,通過location就可以點出人任意想要的定位城市、經緯度等相關信息
BDLocationListener bdLocationListener = new BDLocationListener() {

        @Override
        public void onReceiveLocation(BDLocation location) {
            Toast.makeText(MainActivity.this,
                    arg0.getLatitude() + "/" + arg0.getLongitude(), 100).show();
        }
    };
  • 當然,還需要給定位類綁定監聽才行
  mlocationClient.registerLocationListener(bdLocationListener);

當然不能忘了要啓動服務,我就是有一回忘了啓動服務,糾結了很久,需要在OnStart()和OnDestory()方法中對定位服務分別啓動與停止。代碼如下:

    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
        //啓動定位服務
        if (!mlocationClient.isStarted()) {
            mlocationClient.start();
        }

    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        //停止定位服務
        mlocationClient.stop();
    }
  • 完成。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章