首先说一下注意事项:之前测试过百度的地图,现在要加一个餐饮店的详情页,没留意官网更新,就直接把以前下载的包拿来用,结果MKSearchListener里没有poiDetailSearch这个方法,然后去官网下载了个新包,加载上之后运行,点击查到的兴趣点的时候出错了,报的是空指针,又没提示在哪一行,各种验证之后无果,没办法,然后我把错误信息复制到度娘那里去找,居然只有一个人遇到这个问题,而且还没有解决,再后来下载一个新版本的demo,才知道原来是新版本里面有些方法和之前的写法不一样了,我把包换成原来的,运行正常!!,让我纳闷半天,以为不小心改动了什么地方呐,- -!

废话不多说了,下面这是目前最新的版本,正好新增功能就是我需要的那个

Android 应用集成百度地图开发和注意事项_第1张图片

2012年12月3日 Android SDK: V1.3.5

新增:

  • 开放餐饮类Place详情页
  • 支持LBS云检索,实现用户数据地图展现,新增云检索类

然后就是实现全过程了:
首先是准备工作: 加权限
 <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><uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
加包 在项目Libraries里添加baidumapapi.jar,将libBMapApiEngine_v1_3_5.so复制到工程目录下的libs\armeabi
布局文件main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical" >    <com.baidu.mapapi.MapView        android:id="@+id/loca_mapView"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:clickable="true" /></LinearLayout>

然后就是重点了

   
import java.util.ArrayList;import android.graphics.Canvas;import android.graphics.Paint;import android.graphics.Point;import android.location.LocationManager;import android.os.Bundle;import android.widget.Toast;import com.baidu.mapapi.BMapManager;import com.baidu.mapapi.GeoPoint;import com.baidu.mapapi.MKAddrInfo;import com.baidu.mapapi.MKBusLineResult;import com.baidu.mapapi.MKDrivingRouteResult;import com.baidu.mapapi.MKPoiInfo;import com.baidu.mapapi.MKPoiResult;import com.baidu.mapapi.MKSearch;import com.baidu.mapapi.MKSearchListener;import com.baidu.mapapi.MKSuggestionResult;import com.baidu.mapapi.MKTransitRouteResult;import com.baidu.mapapi.MKWalkingRouteResult;import com.baidu.mapapi.MapController;import com.baidu.mapapi.MapView;import com.baidu.mapapi.Overlay;import com.baidu.mapapi.PoiOverlay;public class LocaMapActivity extends com.baidu.mapapi.MapActivity {private BMapManager mapmanager = null;private LocationManager mlocmanager = null;private double mLat;private double mLon;private MapView mMapView = null;private MKSearch mkserach = null;private String name;private int juli;MKPoiResult mRes = null;    // poi检索结果@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.locamap);init();mkserach = new MKSearch();mkserach.init(mapmanager, new MySearchListener());// 注意,MKSearchListener只支持一个,以最后一次设置为准name = this.getIntent().getExtras().getString("name");juli = Integer.parseInt(this.getIntent().getExtras().getString("juli"));// 查找周边商户(name和juli是用户选择的查询条件 name:餐饮,酒店,ATM之类的,juli是500,1000,2000)mkserach.poiSearchNearBy(name, new GeoPoint((int) (34.824349 * 1E6),(int) (113.688586 * 1E6)), juli);}@Overrideprotected boolean isRouteDisplayed() {// TODO Auto-generated method stubreturn false;}private void init() {// 默认坐标mLat = 34.824349;mLon = 113.688586;mapmanager = new BMapManager(LocaMapActivity.this);mapmanager.init("4B5C387B4901FB04FD45150A6628E95E6B2E68F0", null);mapmanager.start();super.initMapActivity(mapmanager);mMapView = (MapView) findViewById(R.id.loca_mapView);mMapView.setBuiltInZoomControls(true); // 设置启用内置的缩放控件MapController mMapController = mMapView.getController(); // 得到mMapView的控制权,可以用它控制和驱动平移和缩放GeoPoint point = new GeoPoint((int) (mLat * 1E6), (int) (mLon * 1E6));//用默认的经纬度构造一个GeoPoint,单位是微度 (度 * 1E6)mMapController.setCenter(point); // 设置地图中心点mMapController.setZoom(16); // 设置地图zoom级别mMapView.setTraffic(true);// 交通图// mMapView.setSatellite(true);//卫星图mMapView.getOverlays().add(new MyOverlay());mMapView.getOverlays().add(new PoiOverlay(LocaMapActivity.this, mMapView, mkserach)); // 添加ItemizedOverlay实例到mMapView}/* * Overlay:覆盖物的抽象基类,所有的覆盖物均继承此类的方法,实现用户自定义图层显示。 * MyLocationOverlay:一个负责显示用户当前位置的Overlay。 *ItemizedOverlay<Item extends OverlayItem >:Overlay的一个基类,包含了一个OverlayItem列表,相当于一组分条的Overlay,通过继承此类,将一组兴趣点显示在地图上。 * PoiOverlay:本地搜索图层,提供某一特定地区的位置搜索服务,比如在北京市搜索“公园”,通过此图层将公园显示在地图上。 */public class MyOverlay extends Overlay {@Overridepublic void draw(Canvas canvas, MapView mapView, boolean shadow) {mLat = 34.824349;mLon = 113.688586;GeoPoint geoPoint = new GeoPoint((int) (mLat * 1E6),(int) (mLon * 1E6));Paint paint = new Paint();// 在当前的位置绘制一个StringPoint point = mMapView.getProjection().toPixels(geoPoint, null);canvas.drawText("★默认当前位置", point.x, point.y, paint);}}/** * @author Administrator 搜索服务 *         百度地图移动版API集成搜索服务包括:位置检索、周边检索、范围检索、公交检索、驾乘检索、步行检索, *         通过初始化MKSearch类,注册搜索结果的监听对象MKSearchListener,实现异步搜索服务。 *         首先自定义MySearchListener实现MKSearchListener接口,通过不同的回调方法,获得搜索结果: */class MySearchListener implements MKSearchListener {@Overridepublic void onGetWalkingRouteResult(MKWalkingRouteResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetTransitRouteResult(MKTransitRouteResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetPoiResult(MKPoiResult result, int arg1, int error) {if (result == null) {        return;    }mRes=result;    PoiOverlay poioverlay = new PoiOverlay(LocaMapActivity.this, mMapView,mkserach);    poioverlay.setData(result.getAllPoi());    mMapView.getOverlays().clear();    mMapView.getOverlays().add(poioverlay);    mMapView.invalidate();  //刷新地图    mMapView.getController().animateTo(result.getPoi(0).pt);}@Overridepublic void onGetDrivingRouteResult(MKDrivingRouteResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetAddrResult(MKAddrInfo arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetBusDetailResult(MKBusLineResult arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetPoiDetailSearchResult(int arg0, int error) {// TODO Auto-generated method stubtry { if (error!=0) {                 Toast.makeText(LocaMapActivity.this, "未找到商户详细信息", Toast.LENGTH_SHORT).show();             }else{              if (mRes != null) {            ArrayList<MKPoiInfo> allPoi = mRes.getAllPoi();             if (allPoi.get(0).hasCaterDetails) {                        mkserach.poiDetailSearch(allPoi.get(0).uid);                }    }             }} catch (Exception e) {// TODO: handle exceptionToast.makeText(LocaMapActivity.this, e.toString(), 1000).show();}}@Overridepublic void onGetRGCShareUrlResult(String arg0, int arg1) {// TODO Auto-generated method stub}@Overridepublic void onGetSuggestionResult(MKSuggestionResult result, int arg1) {// TODO Auto-generated method stub}}protected void onDestroy() {if (mapmanager != null) {mapmanager.destroy();mapmanager = null;}super.onDestroy();}@Overrideprotected void onPause() {if (mapmanager != null) {mapmanager.stop();}super.onPause();}@Overrideprotected void onResume() {if (mapmanager != null) {mapmanager.start();}super.onResume();}}




更多相关文章

  1. Android Excel 解析 xls 和 xlsx,方法也可以很简单
  2. Android P (4)一种绕过Android P上非SDK接口限制的简单方法
  3. Android OTA包重新签名的方法
  4. 【Android语音合成TTS】百度语音接入方法,和使用技巧详解
  5. 通过wifi连接android设备的方法
  6. Android Studio中新建assets文件的两种方法
  7. Android Intent跳转第三方地图导航大全
  8. 多态在android中(利用接口调用服务中方法)的应用
  9. 谷歌被曝即便禁止定位仍在后台收集用户位置信息

随机推荐

  1. Android(安卓)通过 JNI 调用 Java 类的构
  2. 电脑怎么安装安卓系统?安卓(Android)x86 4
  3. Android指纹识别API讲解
  4. Android电子牌外接USB读卡器读取内容模拟
  5. Android(安卓)手机端与服务器端通过http
  6. android 自定义View(一) View的事件分发
  7. SQLite轻量级数据库的注意事项
  8. 在编辑Android工程时出现R.java文件丢失
  9. Android(安卓):为你的启动页面SplashActiv
  10. Android的市场前景及未来发展