1.顯示地圖
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));
? ? }
});