对于初学者来说,首先得先注意,不同的jar版本,方法也不同,之前不知道,纠结了很久
成都创新互联公司主要从事成都网站设计、成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务山丹,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:13518219792
xml布局
android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > android:id="@+id/mapView" android:layout_width="fill_parent" android:layout_height="fill_parent" />
menu布局
android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" /> android:name="com.baidu.location.f" android:enabled="true" android:process=":remote" > Activity方法实现 import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.Window; import com.baidu.location.BDLocation; import com.baidu.location.BDLocationListener; import com.baidu.location.LocationClient; import com.baidu.location.LocationClientOption; import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.BitmapDescriptor; import com.baidu.mapapi.map.BitmapDescriptorFactory; import com.baidu.mapapi.map.MapStatusUpdate; import com.baidu.mapapi.map.MapStatusUpdateFactory; import com.baidu.mapapi.map.MapView; import com.baidu.mapapi.map.MyLocationConfigeration; import com.baidu.mapapi.map.MyLocationData; import com.baidu.mapapi.map.MyLocationConfigeration.LocationMode; import com.baidu.mapapi.model.LatLng; public class MyMapActivity extends Activity { private MapView mMapView; private BaiduMap baiduMap; /** 定位 */ private LocationClient myLocation; /** 定位监听器 */ public MyLocationListener myLocationListener; /** 当前纬度 */ private double mCurrentLatitude; /** 当前经度 */ private double mCurrentLongitude; /** * 当前定位的模式 */ private LocationMode mCurrentMode = LocationMode.NORMAL; /*** * 是否是第一次定位 */ private volatile boolean isFristLocation = true; private boolean flag = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 在使用SDK各组件之前初始化context信息,传入ApplicationContext // 注意该方法要再setContentView方法之前实现 requestWindowFeature(Window.FEATURE_NO_TITLE); SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_map); init(); initMyLocation(); } /** * 初始化方法 */ private void init() { mMapView = (MapView) findViewById(R.id.mapView); baiduMap = mMapView.getMap(); if (flag) { // 设置显示的地图模式为卫星地图 baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); } else { // 设置显示的地图模式为普通模式 baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); } MapStatusUpdate update = MapStatusUpdateFactory.zoomTo(15.0f); baiduMap.setMapStatus(update); } /** * 初始化定位相关代码 */ private void initMyLocation() { // 定位初始化 myLocation = new LocationClient(this); myLocationListener = new MyLocationListener(); myLocation.registerLocationListener(myLocationListener); // 设置定位的相关配置 LocationClientOption option = new LocationClientOption(); option.setOpenGps(true); // 返回的定位结果是百度经纬度,默认值gcj02(国测局加密经纬度坐标),其他bd09ll(百度加密经纬度坐标),bd09ll(百度加密经纬度坐标) option.setCoorType("gcj02"); // 设置发起定位请求的间隔时间 option.setScanSpan(1000); // 反编译地址 myLocation.setLocOption(option); } /** * 实现定位回调监听 * * @author Administrator * */ private class MyLocationListener implements BDLocationListener { @Override public void onReceiveLocation(BDLocation location) { if (location == null || mMapView == null) return; /** 构造定位数据 */ MyLocationData locationData = new MyLocationData.Builder() .accuracy(location.getRadius()) /** 纬度 */ .latitude(location.getLatitude()) /** 经度 */ .longitude(location.getLongitude()).build(); /** 设置定位数据 */ baiduMap.setMyLocationData(locationData); /** 当前的纬度 */ mCurrentLatitude = location.getLatitude(); /** 当前的经度 */ mCurrentLongitude = location.getLongitude(); /** 设置自定义标记 */ BitmapDescriptor currentMarker = BitmapDescriptorFactory .fromResource(R.drawable.marker); MyLocationConfigeration configeration = new MyLocationConfigeration( mCurrentMode, true, currentMarker); baiduMap.setMyLocationConfigeration(configeration); /** 第一次定位时,将地图位置移动到当前位置 */ if (isFristLocation) { isFristLocation = false; LatLng ll = new LatLng(location.getLatitude(), location.getLongitude()); MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll); baiduMap.animateMapStatus(u); } } } @Override protected void onResume() { // MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause() super.onResume(); mMapView.onResume(); } @Override protected void onPause() { // MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause() super.onPause(); mMapView.onPause(); } @Override protected void onDestroy() { // MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy() mMapView.onDestroy(); mMapView = null; super.onDestroy(); } @Override protected void onStart() { baiduMap.setMyLocationEnabled(true); if (!myLocation.isStarted()) { myLocation.start(); } super.onStart(); } @Override protected void onStop() { // 关闭图层定位 baiduMap.setMyLocationEnabled(false); myLocation.stop(); super.onStop(); } /** * 地图移动到我的位置,此处可以重新发定位请求,然后定位; 直接拿最近一次经纬度,如果长时间没有定位成功,可能会显示效果不好 */ private void center2myLoc() { LatLng ll = new LatLng(mCurrentLatitude, mCurrentLongitude); MapStatusUpdate u = MapStatusUpdateFactory.newLatLng(ll); baiduMap.animateMapStatus(u); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.mode, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // 普通地图 case R.id.id_menu_map_common: baiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); break; // 卫星地图 case R.id.id_menu_map_site: baiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); break; // 我的位置 case R.id.id_menu_map_myLoc: center2myLoc(); break; } return super.onOptionsItemSelected(item); } }
文章标题:百度地图定位功能实现v3_0_0
文章来源:http://cxhlcq.com/article/igiidi.html