不过经过两三天的学习,我觉得吧,我已经了解的百度地图的大概。从界面显示到位置的定位,从无知到豁然开朗。
首先先来看一下我的错误
因为有示例所以代码错误还比较少,我最有印象的错误是因为环境配置的错误
。(注:有其他的错误,不过在此错误的影响下都是不突出的-_-!,-_-#)
一般错误就是没有引入baidumapapi.jar文件,还有就是libs文件夹中缺少内容
baidumapapi.jar文件,引入的步骤:
右键项目名,找到Properties,在目录下找到->java Build Path-接着在>Libraries中选择"Add Exteral JARs",找到并选定baidumapapi.jar确定后返回,
libs文件中的内容要有baidumapapi.jar和remeabi文件夹(文件夹中含libBMapApiEngine_v1_3_3.so)。(注:缺一不可)
注:由于版本问题,其他内容的部分也可能不一样
代码分享:
使用百度地图是要增加权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
android平台的支持:
<supports-screens android:largeScreens="true" android:normalScreens="true" android:smallScreens="true" android:resizeable="true" android:anyDensity="true"/> <uses-sdk android:minSdkVersion="3"></uses-sdk>
注:<uses-sdk android:minSdkVersion="3"></uses-sdk>在某些版本上可能会报错,到时删掉即可
显示百度地图的代码:
public class MainActivity extends MapActivity { // 声明地图管理器对象 private BMapManager mapManager; // 声明地图控件对象 //一个显示地图(数据源自lingtu地图服务)的视图,当被焦点选中时,它能捕获按键事件和触摸手势去平移和缩放地图 private MapView mapView; // 声明控件管理器对象 private MapController mapController; // 定位图层 MyLocationOverlay mLocationOverlay = null; // onResume时注册此listener,onPause时需要Remove,用于接收BMapManager的位置变化 LocationListener mLocationListener = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 实例化一个地图管理器对象 mapManager = new BMapManager(getApplication()); // init方法的第一个参数需填入申请的API Key mapManager.init("22FCFCD052AAAE640F34D608D98CDED68B0744A5", null); // //启动 mapManager.start(); // 继承 super.initMapActivity(mapManager); // //通过id值找到对应的控件 mapView = (MapView) findViewById(R.id.bmapView); mapView.setBuiltInZoomControls(true); // // //用给定的经纬度构造一个GeoPoint(纬度,经度)对象 GeoPoint point = new GeoPoint((int) (44 * 1E6), (int) (116 * 1E6)); // //取得地图控制器对象,用于控制MapView mapController = mapView.getController(); // //设置地图的中心 mapController.setCenter(point); // //设置地图默认的缩放级别 mapController.setZoom(12); } protected void onDestroy() { if (mapManager != null) { mapManager.destroy(); mapManager = null; } super.onDestroy(); } /** * 暂停 */ protected void onPause() { if (mapManager != null) { mapManager.stop(); } super.onPause(); } protected void onResume() { if (mapManager != null) { mapManager.start(); } super.onResume(); } protected boolean isRouteDisplayed() { return false; }
位置的定位:
// 添加定位图层 mLocationOverlay = new MyLocationOverlay(this, mapView); mapView.getOverlays().add(mLocationOverlay); // 注册定位事件 mLocationListener = new LocationListener() { /** * 位置变化 */ @Override public void onLocationChanged(Location location) { if (location != null) { GeoPoint pt = new GeoPoint( (int) (location.getLatitude() * 1e6), (int) (location.getLongitude() * 1e6)); mapView.getController().animateTo(pt); } } };
protected void onResume() { if (mapManager != null) { mapManager.getLocationManager().requestLocationUpdates( mLocationListener); mLocationOverlay.enableMyLocation(); mLocationOverlay.enableCompass(); // 打开指南针 mapManager.start(); } super.onResume(); }