(2)百度地圖sdk的使用

1.顯示地圖

由圖所示,顯示了當前的位置,這其中就用到了定位相關的sdk

public class MainActivityextends AppCompatActivityimplements OnPermission {

public LocationClientmLocationClient =null;

? ? private MyLocationListenermyListener =new MyLocationListener();

? ? private MapViewmMapView =null;

? ? private BitmapDescriptormCurrentMarker;

? ? private BaiduMapmBaiduMap;

? ? @Override

? ? protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

? ? ? ? setContentView(R.layout.activity_main);

? ? ? ? //獲取地圖控件引用

? ? ? ? mMapView = (MapView) findViewById(R.id.bmapView);

? ? ? ? mBaiduMap =mMapView.getMap();

? ? ? ? requestFilePermission();

? ? }

private void requestFilePermission() {

XXPermissions.with(this)

.permission(Permission.Group.LOCATION)

.request(this);

? ? }

@Override

? ? public void hasPermission(List granted, boolean isAll) {

mLocationClient =new LocationClient(getApplicationContext());

? ? ? ? //聲明LocationClient類

? ? ? ? mLocationClient.registerLocationListener(myListener);

? ? ? ? MapStatusUpdate mapStatusUpdate = MapStatusUpdateFactory.zoomBy(2);

? ? ? ? mBaiduMap.animateMapStatus(mapStatusUpdate);

? ? ? ? LocationClientOption option =new LocationClientOption();

? ? ? ? option.setCoorType("bd09ll");// 可選,默認gcj02,設置返回的定位結果坐標系

//? ? ? ? option.setIsNeedAddress(true);

////可選,是否需要地址信息,默認為不需要,即參數為false

//如果開發者需要獲得當前點的地址信息,此處必須為true

? ? ? ? mLocationClient.setLocOption(option);

? ? ? ? mLocationClient.start();

? ? ? ? mMapView.setLogoPosition(LogoPosition.logoPostionleftTop);

? ? }

@Override

? ? public void noPermission(List denied, boolean quick) {

Toast.makeText(MainActivity.this,"沒有獲取足夠的權限",Toast.LENGTH_SHORT).show();

? ? }

public class MyLocationListenerextends BDAbstractLocationListener {

@Override

? ? ? ? public void onReceiveLocation(BDLocation location){

//此處的BDLocation為定位結果信息類,通過它的各種get方法可獲取定位相關的全部結果

//以下只列舉部分獲取地址相關的結果信息

//更多結果信息獲取說明,請參照類參考中BDLocation類中的說明

? ? ? ? ? ? String addr = location.getAddrStr();? ? //獲取詳細地址信息

? ? ? ? ? ? String country = location.getCountry();? ? //獲取國家

? ? ? ? ? ? String province = location.getProvince();? ? //獲取省份

? ? ? ? ? ? String city = location.getCity();? ? //獲取城市

? ? ? ? ? ? String district = location.getDistrict();? ? //獲取區縣

? ? ? ? ? ? String street = location.getStreet();? ? //獲取街道信息

? ? ? ? ? ? double latitude = location.getLatitude();? ? //獲取緯度信息

? ? ? ? ? ? double longitude = location.getLongitude();? ? //獲取經度信息

? ? ? ? ? ? String locationDescribe = location.getLocationDescribe();? ? //獲取位置描述信息

// 開啟定位圖層

? ? ? ? ? ? mBaiduMap.setMyLocationEnabled(true);

// 構造定位數據

? ? ? ? ? ? MyLocationData locData =new MyLocationData.Builder()

.accuracy(location.getRadius())

// 此處設置開發者獲取到的方向信息,順時針0-360

? ? ? ? ? ? ? ? ? ? .direction(100).latitude(location.getLatitude())

.longitude(location.getLongitude()).build();

// 設置定位數據

? ? ? ? ? ? mBaiduMap.setMyLocationData(locData);

// 設置定位圖層的配置(定位模式,是否允許方向信息,用戶自定義定位圖標)

? ? ? ? ? ? mCurrentMarker = BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher);//定位圖標

? ? ? ? ? ? MyLocationConfiguration.LocationMode mCurrentMode = MyLocationConfiguration.LocationMode.FOLLOWING

? ? ? ? ? ? ? ? ? ? ;? //默認為 LocationMode.NORMAL 普通態

? ? ? ? ? ? MyLocationConfiguration config =new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker); //開啟方向

? ? ? ? ? ? mBaiduMap.setMyLocationConfiguration(config);

? ? ? ? }

}

@Override

? ? protected void onDestroy() {

super.onDestroy();

? ? ? ? //在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命周期管理

? ? ? ? mMapView.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();

? ? }

}

隱藏百度logo

View child =mMapView.getChildAt(1);

if (child !=null && (childinstanceof ImageView || childinstanceof ZoomControls)) {

child.setVisibility(View.INVISIBLE);

}

目前界面上是有縮放按鈕的(+和-)

mMapView. showZoomControls(enable);設置隱藏

key監聽

我們初始化sdk是在application里面配置好key,然后在application調用代碼初始化

<application> android:name="baidumapsdk.demo.DemoApplication"

? ? <meta-data?

? ? ? ? android:name="com.baidu.lbsapi.API_KEY"?

? ? ? ? android:value="開發密鑰" />??

</application>

然后我們需要動態注冊一個廣播,看sdk初始化是否成功

public class SDKReceiver extends BroadcastReceiver {

? ? public void onReceive(Context context, Intent intent) {?

? ? ? ? String action = intent.getAction();?

? ? ? ? if(action.equals(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR))?

? ? ? ? {?

? ? ? ? ? ? // key 驗證失敗,相應處理? ? ? ? ? }?

? ? }? }

IntentFilter iFilter = new IntentFilter();

iFilter.addAction(SDKInitializer.SDK_BROADTCAST_ACTION_STRING_PERMISSION_CHECK_ERROR);

iFilter.addAction(SDKInitializer.SDK_BROADCAST_ACTION_STRING_NETWORK_ERROR);?

mReceiver = new SDKReceiver();?

registerReceiver(mReceiver, iFilter);

在ondestroy()

unregisterReceiver(mReceiver);

當用戶在界面上瘋狂操作之后,需要讓用戶回到自己定位的界面

dingwei.setOnClickListener(new View.OnClickListener() {

@Override

? ? public void onClick(View v) {

LatLng point =new LatLng(myLatitude, myLongitude);//經緯度,可以通過BDLocation得到

? ? ? ? mBaiduMap.setMapStatus(MapStatusUpdateFactory.newLatLng(point));

? ? }

});

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容