本文所需的百度地图的版本为:
百度地图基础地图SDK包:baidumapapi_v3_5_0.jar;
百度地图定位SDk包:locSDK_5.2.jar;
首先,需要将所需的两个包导入到工程中libs文件夹下,然后在AndroidManifest.xml配置所需的权限:
基础数据包所需权限:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<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.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
定位数据包所需权限:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
使用百度地图所需的应用key:
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="申请的Key" />
使用定位功能需要注册一个服务:
<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote" >
</service>
使用百度地图SDK需要在Activity创建之前进行实例化:
SDKInitializer.initialize(this); this:所在的类为Application时可以是this,所在的类为Activity时需要改写为getApplicationContext();
public class MainActivity extends Activity {
private MapView mapView;
private BaiduMap map;
private LocationClient loc;
private boolean isFirstLoc = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
SDKInitializer.initialize(this);
setContentView(R.layout.activity_main);
mapView = (MapView) findViewById(R.id.mapView);
map = mapView.getMap();
map.setMapType(BaiduMap.MAP_TYPE_NORMAL);
map.setMyLocationEnabled(true);
getLoc();
}
public void getLoc(){
loc = new LocationClient(this);
loc.registerLocationListener(new MyLocation());
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);
option.setCoorType("bd0911");
option.setScanSpan(1000);
loc.setLocOption(option);
loc.start();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
protected void onDestroy() {
loc.stop();
map.setMyLocationEnabled(false);
mapView.onDestroy();
mapView = null;
super.onDestroy();
}
@Override
protected void onPause() {
mapView.onPause();
super.onPause();
}
@Override
protected void onResume() {
mapView.onResume();
super.onResume();
}
private class MyLocation implements BDLocationListener{
@Override
public void onReceiveLocation(BDLocation arg0) {
if(arg0 == null || mapView == null){
return;
}
MyLocationData data = new MyLocationData.Builder()
.accuracy(arg0.getRadius())
.direction(100)
.latitude(arg0.getLatitude())
.longitude(arg0.getLongitude())
.build();
map.setMyLocationData(data);
if(isFirstLoc){
isFirstLoc = false;
LatLng ll = new LatLng(arg0.getLatitude(), arg0.getLongitude());
MapStatusUpdate update = MapStatusUpdateFactory.newLatLng(ll);
map.animateMapStatus(update);
}
}
}
}