1.准备工作
1.1在高德地图导航包中用到的语音库为科大讯飞的,要使用的话也要在科大讯飞的开源平台上注册一个个人使用者key
1.2在使用高德地图的lib库时,最好使用导航和地图的合成库,如果导航库和地图库不匹配的话,在导航页面上就会出现不同步的情况(自己就遇到过两个包不匹配,地图库版本比较老,导致导航页面最后只有声音而图标不走的情况)

2.关键字搜索功能的实现
实现PoiSearch.OnPoiSearchListener

@Overridepublic void onPoiSearched(PoiResult result, int rCode) {if (rCode == 0){if (result !=null && result.getQuery()!= null){if (result.getQuery().equals(query)){poiResult = result;List<PoiItem> poiItems = poiResult.getPois();List<SuggestionCity> suggestionCities = poiResult.getSearchSuggestionCitys();if (poiItems != null && poiItems.size()>0){MyPoiOverlay myPoiOverlay = new MyPoiOverlay(aMap,poiItems);myPoiOverlay.removeFromMap();myPoiOverlay.addToMap();myPoiOverlay.zoomToSpan();for (int i = 0 ; i<poiItems.size();i++){list.add(" "+(i+1)+"."+poiItems.get(i).toString());}ArrayAdapter<String> adapter=new ArrayAdapter<String>(MainActivity.this,R.layout.main_listview_item,getData());listView.setAdapter(adapter);}else {Log.i(TAG,"onPoiSearched error");}}}}else {Log.i(TAG,"onSearchPoi + rcode = "+rCode);}}

其中MyPoiOverlay类是重写了PoiOverlay类的getBitmapDescriptor方法,目的是为了让搜索回调的poiItems中的各个marker使用不同的图标,当然如果要实现更多的效果,可以直接写一个新的Overlay

public class MyPoiOverlay extends PoiOverlay {public MyPoiOverlay(AMap aMap, List<PoiItem> list) {super(aMap, list);}@Overrideprotected BitmapDescriptor getBitmapDescriptor(int i) {//return super.getBitmapDescriptor(i);switch (i){case 0:return BitmapDescriptorFactory.fromResource(R.drawable.marker_1);case 1:return BitmapDescriptorFactory.fromResource(R.drawable.marker_2);case 2:return BitmapDescriptorFactory.fromResource(R.drawable.marker_3);case 3:return BitmapDescriptorFactory.fromResource(R.drawable.marker_4);case 4:return BitmapDescriptorFactory.fromResource(R.drawable.marker_5);case 5:return BitmapDescriptorFactory.fromResource(R.drawable.marker_6);case 6:return BitmapDescriptorFactory.fromResource(R.drawable.marker_7);case 7:return BitmapDescriptorFactory.fromResource(R.drawable.marker_8);case 8:return BitmapDescriptorFactory.fromResource(R.drawable.marker_9);case 9:return BitmapDescriptorFactory.fromResource(R.drawable.marker_10);}return BitmapDescriptorFactory.fromResource(R.drawable.map);}
}

关键字的模糊提示用的是AutoCompleteTextView,重写TextWatcher的onTextChanged。

@Overridepublic void onTextChanged(CharSequence s, int start, int before, int count) {String newText = s.toString().trim();Inputtips inputtips = new Inputtips(this, new Inputtips.InputtipsListener() {@Overridepublic void onGetInputtips(List<Tip> tipList, int rcode) {if (rcode == 0 ){List<String> listString = new ArrayList<String>();for (int i = 0; i < tipList.size(); i++) {listString.add(tipList.get(i).getName());}ArrayAdapter<String> aAdapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.route_inputs, listString);searchText.setAdapter(aAdapter);aAdapter.notifyDataSetChanged();}}});try {inputtips.requestInputtips(newText,"杭州");} catch (AMapException e) {e.printStackTrace();}}

R.layout.route_inputs为下拉框每个条目的xml

搜索关键字,其中Query中的第一个参数是关键字,第三个参数是范围

public void doSearch(){query = new PoiSearch.Query(searchText.getText().toString(),"","杭州");query.setPageSize(10);query.setPageNum(0);poiSearch = new PoiSearch(this,query);poiSearch.setOnPoiSearchListener(this);poiSearch.searchPOIAsyn();}

3.路径规划
实现AMapNaviListener,同时添加监听对象
aMapNavi = AMapNavi.getInstance(this);
aMapNavi.addAMapNaviListener(this);
mRouteOverlay = new com.amap.api.navi.view.RouteOverLay(aMap,null);
这个选择的模式PathPlanningStrategy.DRIVING_DEFAULT为驾驶模式,高德地图还提供步行路线的规划。
calculateDriveRoute这个函数实现。导航的时候起点,终点输入的都是经纬度。

private void calculateDriveRoute(){mStartPoints.clear();mEndPoints.clear();NaviLatLng naviLatLng = new NaviLatLng(localLocation.getLatitude(),localLocation.getLongitude());mStartPoints.add(naviLatLng);mEndPoints.add(mNavEnd);boolean isSuccess = aMapNavi.calculateDriveRoute(mStartPoints,mEndPoints,null, PathPlanningStrategy.DRIVING_DEFAULT);if (!isSuccess){Log.i(TAG,"driving calculateDriveRoute error");}
}

路径计算成功或者失败都会有回调

@Overridepublic void onCalculateRouteSuccess() {AMapNaviPath naviPath = aMapNavi.getNaviPath();if (naviPath == null){return;}Log.i(TAG,"navi路径规划成功");mRouteOverlay.setAMapNaviPath(naviPath);mRouteOverlay.addToMap();aMap.moveCamera(CameraUpdateFactory.zoomTo(18.0f));}@Overridepublic void onCalculateRouteFailure(int i) {Log.i(TAG,"navi路径规划错误+"+i);}

4.导航功能的实现
布局文件直接加载com.amap.api.navi.AMapNaviView即可

<?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"><com.amap.api.navi.AMapNaviView
        android:id="@+id/navi_view"android:layout_width="match_parent"android:layout_height="match_parent"/>
</LinearLayout>

主要实现了AMapNaviListener,AMapNaviViewListener
在路径规划成功后调用mAMapNavi.startNavi(AMapNavi.EmulatorNaviMode),这里使用的是模拟导航模式,主要在onCreate中做了如下配置。

@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);mTtsManager = TTSController.getInstance(getApplicationContext());mTtsManager.init();mTtsManager.startSpeaking();mAMapNavi = AMapNavi.getInstance(getApplicationContext());mAMapNavi.addAMapNaviListener(this);mAMapNavi.addAMapNaviListener(mTtsManager);mAMapNavi.setEmulatorNaviSpeed(150);Intent intent = getIntent();mStartLatlng = new NaviLatLng(intent.getDoubleExtra("startLatitude",30),intent.getDoubleExtra("startLongitude",120));mEndLatlng = new NaviLatLng(intent.getDoubleExtra("endLatitude",30.001),intent.getDoubleExtra("endLongitude",120.0001));mStartList.add(mStartLatlng);mEndList.add(mEndLatlng);mAMapNavi.calculateDriveRoute(mStartList, mEndList, mWayPointList, PathPlanningStrategy.DRIVING_DEFAULT);}

源码已经上传,比较简单。只是一个demo。仅供参考
https://github.com/runyyf/android_gaode_demo.git

android-4集成高德地图的搜索和导航功能相关推荐

  1. Android中集成高德地图SDK实现地图定位和导航功能(二)

    我们接着上一篇文章开始继续实现android中集成高德地图的SDK实现地图 定位,搜索,导航的功能 如何让地图在手机上实现呢? 1.配置AndroidManifest 中的权限申请 可以参考官方文档 ...

  2. Android中集成高德地图SDK实现地图定位和导航功能(一)

    一.前期准备工作 1.在高德地图开发者平创建一个自己的项目 名称和应用类型随便填 2.添加Key 1.添加key 2.获取SHA1值 2.1.使用windwos+R 输入cmd 打开控制窗口 输入 w ...

  3. vue集成高德地图后 搜索按钮国际化的问题

    这里就不详细介绍 vue如何集成高德地图了, 如有问题 请参考:https://elemefe.github.io/vue-amap/#/zh-cn/introduction/install 咱先说下 ...

  4. Android 高德地图黑屏定位,Android Fragment集成高德地图黑屏的问题解决方案

    官方给的3.0Map的集成api说了: MapView 是 Android View 类的一个子类,它可以帮助您在 Android View 中放置地图,它是应用程序和窗口部件的基本构建类.MapVi ...

  5. Android 快速集成高德地图,完美解决

    最终效果是,本App展示地图,点击地图导航,调转三方实现导航. 1.迈出第一步,去创建自己的应用key https://lbs.amap.com/ 1.1创建完应用之后,点击页面的{添加},要求填写自 ...

  6. Android项目集成高德地图定位功能

    1.在Project的build.gradle文件中配置repositories,添加maven或jcenter仓库地址 Android Studio默认会在Project的build.gradle为 ...

  7. Android实现高德地图POI搜索

    效果图如下: 导入高德地图的搜索服务包到工程的libs目录中,并配置好权限与用户KEY. 权限如下: <uses-permission android:name="android.pe ...

  8. android高德地图后台运行,Android手把手教你集成高德地图

    在上一篇博客上,和大家分享了如何在Android中集成高德定位以及定位的基本使用.今天我们就来看看高德地图在Android中如何使用吧. 同样,我将本篇博客的内容分为如下部分: (1)添加高德SDK ...

  9. Android——高德地图地点搜索框

    效果图 首先 实现效果如图.由于搜索采用的是 高德地图搜索 SDK 所以需要到 高德地图开发者注册账号 获取到 appKey 注册成功进入个人中心 创建对应的应用 build.gradle 创建项目, ...

最新文章

  1. 实现人脸识别性别之路---open CV将图片显示出来
  2. 计算机操作系统开启审计功能,深入浅出理解操作系统安全
  3. 提升Web用户体验的71个设计要点
  4. css -- 两种方法实现流式布局
  5. 法学学士学位的完整形式是什么?
  6. 采用JAVA编写程序实现从文件读取操作
  7. Node实现的异步I/O
  8. python3 多线程 threading.local 代理_threading.local的作用?Python每日3题(多线程专题)...
  9. 论文笔记-LSHTC: A Benchmark for Large-Scale Text Classification-2015
  10. linux vi打开后向上查找文本,linux之文本编辑器vi常用命令
  11. python足球数据分析_我用Python对科比NBA生涯进行了一个数据分析
  12. 数字信号处理技术在各个领域(电信、音频、图像、雷达、声呐等)的用途
  13. 正大国际琪貨召主涨沪:期货交易止损方法主要有那些
  14. Word论文排版之样式的使用
  15. 天正菜单栏不见了怎么显示出来_天正CAD中菜单栏不见了如何调出来?
  16. 坚持是一种态度,公众号粉丝突破 1300 啦
  17. 华为机试 - 出错的或电路
  18. 如何更好使用markdown输出pdf
  19. Poly-YOLO keras代码记录
  20. 远程桌面仅计算机,仅允许运行使用网络级别身份验证的远程桌面计算机连接失败处理方法(远程桌面连接)...

热门文章

  1. 【微信小程序】随机点名系统(点击开始滚动名字点击结束按钮结束滚动)
  2. rust 安装与学习所遇到的部分问题
  3. Java实现云端存储、短信、邮件、沙盒支付
  4. 白乔原创:实战软件DIY
  5. maya为什么不能导出fbx_maya的模型导出为OBJ,然后导入到3dmax后uv全乱了 (导出FBX更不行,导出的FBX文件放max里面基本没面了)...
  6. 【工具】动图展示 60+ 个前端常用插件库合集
  7. 与“你”相关,中国移动数据语音与天猫精灵携手打造打造优质智能生活
  8. curl 增加header_Curl发送header头信息
  9. 页面表单数据返显方法
  10. 链传动运动仿真(motion分析)制作包含源文件