1. 程式人生 > >百度地圖SDK(二)——簡單地圖和定位demo

百度地圖SDK(二)——簡單地圖和定位demo

MainActivity程式碼如下:

package com.example.administrator;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import com.baidu.location.BDLocation;
import com.baidu.location.BDLocationListener;
import 
com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.MapStatus; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MyLocationData;
import com.baidu.mapapi.map.TextureMapView; import com.baidu.mapapi.model.LatLng; public class MainActivity extends AppCompatActivity { private LocationClient locationClient; public MyLocationListenner myListener = new MyLocationListenner(); private TextureMapView mMapView; private BaiduMap mBaiduMap
; boolean isFirstLoc = true; // 是否首次定位 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getSupportActionBar().hide(); SDKInitializer.initialize(getApplicationContext()); /*初始化SDK 為了顯示地圖*/ setContentView(R.layout.activity_main); mMapView = (TextureMapView) findViewById(R.id.mTexturemap); mBaiduMap = mMapView.getMap(); mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); // 開啟定點陣圖層 mBaiduMap.setMyLocationEnabled(true); /** * 定位初始化 */ //宣告定位SDK核心類 locationClient = new LocationClient(this); //註冊監聽 locationClient.registerLocationListener(myListener); //配置定位資訊 initLocation(); //開啟定位 locationClient.start(); } /** * 定位SDK監聽函式 */ public class MyLocationListenner implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { // map view 銷燬後不在處理新接收的位置 if (location == null || mMapView == null) { return; } MyLocationData locData = new MyLocationData.Builder() .accuracy(location.getRadius()) // 此處設定開發者獲取到的方向資訊,順時針0-360 .direction(100).latitude(location.getLatitude()) .longitude(location.getLongitude()).build(); mBaiduMap.setMyLocationData(locData); 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())); } } public void onReceivePoi(BDLocation poiLocation) { } } private void initLocation(){ LocationClientOption option = new LocationClientOption(); option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy); //可選,設定定位模式,預設高精度 //LocationMode.Hight_Accuracy:高精度; //LocationMode. Battery_Saving:低功耗; //LocationMode. Device_Sensors:僅使用裝置; option.setCoorType("bd09ll"); //可選,設定返回經緯度座標型別,預設gcj02 //gcj02:國測局座標; //bd09ll:百度經緯度座標; //bd09:百度墨卡託座標; //海外地區定位,無需設定座標型別,統一返回wgs84型別座標 option.setScanSpan(1000); //可選,設定發起定位請求的間隔,int型別,單位ms //如果設定為0,則代表單次定位,即僅定位一次,預設為0 //如果設定非0,需設定1000ms以上才有效 option.setOpenGps(true); //可選,設定是否使用gps,預設false //使用高精度和僅用裝置兩種定位模式的,引數必須設定為true option.setLocationNotify(true); //可選,設定是否當GPS有效時按照1S/1次頻率輸出GPS結果,預設false option.setIgnoreKillProcess(false); //可選,定位SDK內部是一個service,並放到了獨立程序。 //設定是否在stop的時候殺死這個程序,預設(建議)不殺死,即setIgnoreKillProcess(true) option.SetIgnoreCacheException(false); //可選,設定是否收集Crash資訊,預設收集,即引數為false option.setWifiCacheTimeOut(5*60*1000); //可選,7.2版本新增能力 //如果設定了該介面,首次啟動定位時,會先判斷當前WiFi是否超出有效期,若超出有效期,會先重新掃描WiFi,然後定位 option.setEnableSimulateGps(false); //可選,設定是否需要過濾GPS模擬結果,預設需要,即引數為false locationClient.setLocOption(option); //mLocationClient為第二步初始化過的LocationClient物件 //需將配置好的LocationClientOption物件,通過setLocOption方法傳遞給LocationClient物件使用 //更多LocationClientOption的配置,請參照類參考中LocationClientOption類的詳細說明 } @Override protected void onDestroy() { // 退出時銷燬定位 locationClient.stop(); // 關閉定點陣圖層 mBaiduMap.setMyLocationEnabled(false); mMapView.onDestroy(); mMapView = null; super.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity執行onResume時執行mMapView. onResume (),實現地圖生命週期管理 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity執行onPause時執行mMapView. onPause (),實現地圖生命週期管理 mMapView.onPause(); }  }

要在佈局中加入:

<com.baidu.mapapi.map.TextureMapView
android:id="@+id/mTexturemap"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</com.baidu.mapapi.map.TextureMapView>