Android 百度地图简单使用
介绍一下百度地图的基本配置,首先自行注册百度开发者账号,创建一个应用。在Android工程的manifest文件中添加权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_SETTINGS" />
在Application中添加:
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="应用密钥" /> <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" /> //最新的好像不需要下面这个servive
下载百度地图SDK:
将jar文件放到工程的libs目录,在app的java同级创建jniLibs,把其他的放进去。
在xml布局文件放入地图控件:
<com.baidu.mapapi.map.MapView android:id="@+id/bmapView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:clickable="true" />
主代码如下:
public class MainActivity extends AppCompatActivity implements BDLocationListener{ private MapView mMapView = null; private BaiduMap mBaiduMap = null; private BitmapDescriptor mCurrentMarker = null; private LocationClient mLocationClient = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各组件之前初始化context信息,传入ApplicationContext //注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); //获取地图控件引用 mMapView = (MapView) findViewById(R.id.bmapView); mBaiduMap = mMapView.getMap(); // 开启定位图层 mBaiduMap.setMyLocationEnabled(true); // 设置定位图层的配置(定位模式,是否允许方向信息,用户自定义定位图标) MyLocationConfiguration.LocationMode mCurrentMode = MyLocationConfiguration.LocationMode.FOLLOWING; MyLocationConfiguration config = new MyLocationConfiguration(mCurrentMode, true, mCurrentMarker); mBaiduMap.setMyLocationConfigeration(config); //触摸地图时,取消中心固定在定位坐标 mBaiduMap.setOnMapTouchListener(new BaiduMap.OnMapTouchListener() { @Override public void onTouch(MotionEvent motionEvent) { MyLocationConfiguration config = new MyLocationConfiguration(null, true, mCurrentMarker); mBaiduMap.setMyLocationConfigeration(config); } }); mLocationClient = new LocationClient(getApplicationContext()); //声明LocationClient类 mLocationClient.registerLocationListener(this); //注册监听函数 //设置定位参数 LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); option.setCoorType("bd09ll");//返回的定位结果是百度经纬度,默认值gcj02 option.setScanSpan(1000); mLocationClient.setLocOption(option); mLocationClient.start(); } @Override protected void onPause() { super.onPause(); //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理 mMapView.onPause(); } @Override protected void onResume() { super.onResume(); //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理 mMapView.onResume(); } @Override protected void onDestroy() { super.onDestroy(); //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理 // 退出时销毁定位 mLocationClient.stop(); // 关闭定位图层 mBaiduMap.setMyLocationEnabled(false); mMapView.onDestroy(); mMapView = null; } @Override public void onReceiveLocation(BDLocation bdLocation) { // 构造定位数据 MyLocationData locData = new MyLocationData.Builder() .accuracy(bdLocation.getRadius()) // 此处设置开发者获取到的方向信息,顺时针0-360 .direction(100).latitude(bdLocation.getLatitude()) .longitude(bdLocation.getLongitude()).build(); // 设置定位数据 mBaiduMap.setMyLocationData(locData); } }