介绍一下百度地图的基本配置,首先自行注册百度开发者账号,创建一个应用。在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);
}
}