Android 百度地图定位

本文所需的百度地图的版本为:

百度地图基础地图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);
			}
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值