高德导航功能模块

主要代码:

public class MainActivity extends BaseActivity {

private EditText edit_end_lng;

private EditText edit_end_lat;

private EditText edi_star_Lat;

private EditText edi_star_Lng;

public static Double endLng = 0.0;

public static Double endLat = 0.0;

public static Double startLat = 0.0;

public static Double startLng = 0.0;

NaviLatLng mStartLatlng ;

NaviLatLng mEndLatlng ;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

iniUi();

mAMapNaviView = (AMapNaviView) findViewById(R.id.navi_view);

mAMapNaviView.onCreate(savedInstanceState);

mAMapNaviView.setAMapNaviViewListener(this);

}

public void iniUi()

{

edit_end_lat = (EditText) findViewById(R.id.edit_end_lat);

edit_end_lng = (EditText) findViewById(R.id.edit_end_lng);

edi_star_Lat = (EditText) findViewById(R.id.edi_star_Lat);

edi_star_Lng = (EditText) findViewById(R.id.edi_star_Lng);

}

public void btnSure(View v)

{

String end_lat = edit_end_lat.getText().toString();

String end_lng = edit_end_lng.getText().toString();

String star_lat = edi_star_Lat.getText().toString();

String star_lng = edi_star_Lng.getText().toString();

if (end_lng != null) {

try {

endLng = Double.parseDouble(end_lng);

} catch (Exception e) {

}

}

if (end_lat != null) {

try {

endLat = Double.parseDouble(end_lat);

} catch (Exception e) {

}

}

if (star_lat != null) {

try {

startLat = Double.parseDouble(star_lat);

} catch (Exception e) {

}

}

if (star_lng != null) {

try {

startLng = Double.parseDouble(star_lng);

} catch (Exception e) {

}

}

Log.e("日志查看","endLng="+endLng );

Log.e("日志查看","endLat="+endLat );

Log.e("日志查看","startLat="+startLat);

Log.e("日志查看","startLng="+startLng );

mStartLatlng = new NaviLatLng(startLng,startLat);

mEndLatlng = new NaviLatLng(endLng,endLat);

//文本框中输入正常的经纬度就可以导航成功,如下列所示:

//开始输入:经度24.67, 纬度100.10

//结束输入:经度25.80, 纬度118.34

// 设置模拟导航的行车速度

mAMapNavi.setEmulatorNaviSpeed(350);

sList.add(mStartLatlng);

eList.add(mEndLatlng);

onInitNaviSuccess();

}

}

public class BaseActivity extends Activity implements AMapNaviListener, AMapNaviViewListener {

protected AMapNaviView mAMapNaviView;

protected AMapNavi mAMapNavi;

protected TTSController mTtsManager;

protected final List<NaviLatLng> sList = new ArrayList<NaviLatLng>();

protected final List<NaviLatLng> eList = new ArrayList<NaviLatLng>();

protected List<NaviLatLng> mWayPointList;

@Override

protected 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(350);

sList.add(new MainActivity().mStartLatlng);

eList.add(new MainActivity().mEndLatlng);

sList.add(mStartLatlng);

eList.add(mEndLatlng);*/

}

@Override

protected void onResume() {

super.onResume();

mAMapNaviView.onResume();

}

@Override

protected void onPause() {

super.onPause();

mAMapNaviView.onPause();

//        仅仅是停止你当前在说的这句话,一会到新的路口还是会再说的

mTtsManager.stopSpeaking();

//

//        停止导航之后,会触及底层stop,然后就不会再有回调了,但是讯飞当前还是没有说完的半句话还是会说完

//        mAMapNavi.stopNavi();

}

@Override

protected void onDestroy() {

super.onDestroy();

mAMapNaviView.onDestroy();

//since 1.6.0 不再在naviview destroy的时候自动执行AMapNavi.stopNavi();请自行执行

mAMapNavi.stopNavi();

mAMapNavi.destroy();

mTtsManager.destroy();

}

@Override

public void onInitNaviFailure() {

Toast.makeText(this, "init navi Failed", Toast.LENGTH_SHORT).show();

}

@Override

public void onInitNaviSuccess() {

/**

* 方法:

*   int strategy=mAMapNavi.strategyConvert(congestion, avoidhightspeed, cost, hightspeed, multipleroute);

* 参数:

* @congestion 躲避拥堵

* @avoidhightspeed 不走高速

* @cost 避免收费

* @hightspeed 高速优先

* @multipleroute 多路径

*

* 说明:

*      以上参数都是boolean类型,其中multipleroute参数表示是否多条路线,如果为true则此策略会算出多条路线。

* 注意:

*      不走高速与高速优先不能同时为true

*      高速优先与避免收费不能同时为true

*/

int strategy=0;

try {

strategy=mAMapNavi.strategyConvert(true, false, false, false, false);

} catch (Exception e) {

e.printStackTrace();

}

mAMapNavi.calculateDriveRoute(sList, eList, mWayPointList,strategy);

}

@Override

public void onStartNavi(int type) {

}

@Override

public void onTrafficStatusUpdate() {

}

@Override

public void onLocationChange(AMapNaviLocation location) {

}

@Override

public void onGetNavigationText(int type, String text) {

}

@Override

public void onEndEmulatorNavi() {

}

@Override

public void onArriveDestination() {

}

@Override

public void onCalculateRouteSuccess() {

mAMapNavi.startNavi(NaviType.EMULATOR);

}

@Override

public void onCalculateRouteFailure(int errorInfo) {

}

@Override

public void onReCalculateRouteForYaw() {

}

@Override

public void onReCalculateRouteForTrafficJam() {

}

@Override

public void onArrivedWayPoint(int wayID) {

}

@Override

public void onGpsOpenStatus(boolean enabled) {

}

@Override

public void onNaviSetting() {

}

@Override

public void onNaviMapMode(int isLock) {

}

@Override

public void onNaviCancel() {

finish();

}

@Override

public void onNaviTurnClick() {

}

@Override

public void onNextRoadClick() {

}

@Override

public void onScanViewButtonClick() {

}

@Deprecated

@Override

public void onNaviInfoUpdated(AMapNaviInfo naviInfo) {

}

@Override

public void onNaviInfoUpdate(NaviInfo naviinfo) {

}

@Override

public void OnUpdateTrafficFacility(TrafficFacilityInfo trafficFacilityInfo) {

}

@Override

public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) {

}

@Override

public void showCross(AMapNaviCross aMapNaviCross) {

}

@Override

public void hideCross() {

}

@Override

public void showLaneInfo(AMapLaneInfo[] laneInfos, byte[] laneBackgroundInfo, byte[] laneRecommendedInfo) {

}

@Override

public void hideLaneInfo() {

}

@Override

public void onCalculateMultipleRoutesSuccess(int[] ints) {

}

@Override

public void notifyParallelRoad(int i) {

}

@Override

public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos) {

}

@Override

public void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) {

}

@Override

public void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo aimLessModeCongestionInfo) {

}

@Override

public void onLockMap(boolean isLock) {

}

@Override

public void onNaviViewLoaded() {

Log.d("wlx", "导航页面加载成功");

Log.d("wlx", "请不要使用AMapNaviView.getMap().setOnMapLoadedListener();会overwrite导航SDK内部画线逻辑");

}

@Override

public boolean onNaviBackClick() {

return false;

}

}

public class TTSController implements SynthesizerListener, AMapNaviListener {

public static TTSController ttsManager;

boolean isfinish = true;

private Context mContext;

// 合成对象.

private SpeechSynthesizer mSpeechSynthesizer;

/**

* 用户登录回调监听器.

*/

private SpeechListener listener = new SpeechListener() {

@Override

public void onData(byte[] arg0) {

}

@Override

public void onCompleted(SpeechError error) {

if (error != null) {

}

}

@Override

public void onEvent(int arg0, Bundle arg1) {

}

};

TTSController(Context context) {

mContext = context;

}

public static TTSController getInstance(Context context) {

if (ttsManager == null) {

ttsManager = new TTSController(context);

}

return ttsManager;

}

public void init() {

SpeechUser.getUser().login(mContext, null, null,

"appid=" + mContext.getString(R.string.app_id), listener);

// 初始化合成对象.

mSpeechSynthesizer = SpeechSynthesizer.createSynthesizer(mContext);

initSpeechSynthesizer();

}

/**

* 使用SpeechSynthesizer合成语音,不弹出合成Dialog.

*

* @param

*/

public void playText(String playText) {

if (!isfinish) {

return;

}

if (null == mSpeechSynthesizer) {

// 创建合成对象.

mSpeechSynthesizer = SpeechSynthesizer.createSynthesizer(mContext);

initSpeechSynthesizer();

}

// 进行语音合成.

mSpeechSynthesizer.startSpeaking(playText, this);

}

public void stopSpeaking() {

if (mSpeechSynthesizer != null)

mSpeechSynthesizer.stopSpeaking();

}

public void startSpeaking() {

isfinish = true;

}

private void initSpeechSynthesizer() {

// 设置发音人

mSpeechSynthesizer.setParameter(SpeechConstant.VOICE_NAME,

mContext.getString(R.string.preference_default_tts_role));

// 设置语速

mSpeechSynthesizer.setParameter(SpeechConstant.SPEED,

"" + mContext.getString(R.string.preference_key_tts_speed));

// 设置音量

mSpeechSynthesizer.setParameter(SpeechConstant.VOLUME,

"" + mContext.getString(R.string.preference_key_tts_volume));

// 设置语调

mSpeechSynthesizer.setParameter(SpeechConstant.PITCH,

"" + mContext.getString(R.string.preference_key_tts_pitch));

}

@Override

public void onBufferProgress(int arg0, int arg1, int arg2, String arg3) {

}

@Override

public void onCompleted(SpeechError arg0) {

isfinish = true;

}

@Override

public void onSpeakBegin() {

isfinish = false;

}

@Override

public void onSpeakPaused() {

}

@Override

public void onSpeakProgress(int arg0, int arg1, int arg2) {

}

@Override

public void onSpeakResumed() {

}

public void destroy() {

if (mSpeechSynthesizer != null) {

mSpeechSynthesizer.stopSpeaking();

}

}

@Override

public void onArriveDestination() {

this.playText("到达目的地");

}

@Override

public void onArrivedWayPoint(int arg0) {

}

@Override

public void onCalculateRouteFailure(int arg0) {

this.playText("路径计算失败,请检查网络或输入参数");

}

@Override

public void onCalculateRouteSuccess() {

String calculateResult = "路径计算就绪";

this.playText(calculateResult);

}

@Override

public void onEndEmulatorNavi() {

this.playText("导航结束");

}

@Override

public void onGetNavigationText(int arg0, String arg1) {

this.playText(arg1);

}

@Override

public void onInitNaviFailure() {

}

@Override

public void onInitNaviSuccess() {

}

@Override

public void onLocationChange(AMapNaviLocation arg0) {

}

@Override

public void onReCalculateRouteForTrafficJam() {

this.playText("前方路线拥堵,路线重新规划");

}

@Override

public void onReCalculateRouteForYaw() {

this.playText("您已偏航");

}

@Override

public void onStartNavi(int arg0) {

}

@Override

public void onTrafficStatusUpdate() {

}

@Override

public void onGpsOpenStatus(boolean arg0) {

}

@Override

public void onNaviInfoUpdated(AMapNaviInfo arg0) {

}

@Override

public void onNaviInfoUpdate(NaviInfo arg0) {

}

@Override

public void OnUpdateTrafficFacility(TrafficFacilityInfo trafficFacilityInfo) {

}

@Override

public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) {

}

@Override

public void showCross(AMapNaviCross aMapNaviCross) {

}

@Override

public void hideCross() {

}

@Override

public void showLaneInfo(AMapLaneInfo[] aMapLaneInfos, byte[] bytes, byte[] bytes1) {

}

@Override

public void hideLaneInfo() {

}

@Override

public void onCalculateMultipleRoutesSuccess(int[] ints) {

}

@Override

public void notifyParallelRoad(int i) {

}

@Override

public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos) {

}

@Override

public void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) {

}

@Override

public void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo aimLessModeCongestionInfo) {

}

}

public class Utils {

public static final String DAY_NIGHT_MODE = "daynightmode";

public static final String DEVIATION = "deviationrecalculation";

public static final String JAM = "jamrecalculation";

public static final String TRAFFIC = "trafficbroadcast";

public static final String CAMERA = "camerabroadcast";

public static final String SCREEN = "screenon";

public static final String THEME = "theme";

public static final String ISEMULATOR = "isemulator";

public static final String ACTIVITYINDEX = "activityindex";

public static final int SIMPLEHUDNAVIE = 0;

public static final int EMULATORNAVI = 1;

public static final int SIMPLEGPSNAVI = 2;

public static final int SIMPLEROUTENAVI = 3;

public static final boolean DAY_MODE = false;

public static final boolean NIGHT_MODE = true;

public static final boolean YES_MODE = true;

public static final boolean NO_MODE = false;

public static final boolean OPEN_MODE = true;

public static final boolean CLOSE_MODE = false;

}

时间: 2024-12-28 18:06:35

高德导航功能模块的相关文章

APP常用模块

2016年上半年 APICloud合作云服务商提供了各种类型模块多达45个 其中最新发布的重要模块有 美洽客服模块 亲加视频直播相关模块 保利威视视频播放器模块 苹果银联支付模块 贝宝支付模块 谷歌分析模块 七牛云存储模块 又拍云存储模块 高德导航模块 趣拍视频直播相关模块 anyRTC视频直播相关模块 芒果广告相关多种模块 万普实际广告模块 蓝牙打印机模块 腾讯统计分析模块 百度统计分析模块 友盟统计分析模块 第三方服务类模块的更新升级的重要有 高德地图模块添加离线地图功能相关接口 百度地图模

分享一些App常用的模块

2016年上半年 APICloud合作云服务商提供了各种类型模块多达45个 其中最新发布的重要模块有 美洽客服模块 亲加视频直播相关模块 保利威视视频播放器模块 苹果银联支付模块 贝宝支付模块 谷歌分析模块 七牛云存储模块 又拍云存储模块 高德导航模块 趣拍视频直播相关模块 anyRTC视频直播相关模块 芒果广告相关多种模块 万普实际广告模块 蓝牙打印机模块 腾讯统计分析模块 百度统计分析模块 友盟统计分析模块 第三方服务类模块的更新升级的重要有 高德地图模块添加离线地图功能相关接口 百度地图模

工作会议

一.小组会议概况: 时间:2014-5-12,  22:10-22:50. 会议历时40分钟. 参会成员:孔祥安,郭志伟,郭志鑫,王扣住,宫文策,刘丛欢. 会议氛围良好,小组内成员积极讨论,踊跃发言,就今天的软件工程课堂演示作总结,就一些具体问题的解决方法进行详细的分析交流,并提出一些新的想法和可行性的意见. 二.小组会议的主要内容: 本次会议主要就今天软件工程课各组的的演示进行了交流,在今天各小组的演示中,我们看到了各个小组的的成果,看到了他们值得我们学习的地方,和一些不够完善的方面.同时对我

常规功能和模块自定义系统 (cfcmms)—043模块导航功能的重构(1)

043模块导航功能的重构(1) 模块导航即基于grid的条件限定.可以明确在导航树中导航条件,以及在该导航条件之下当前模块的记录数.在选中某个导航记录时,grid的数据会更新为该导航所设置的条件中.(这个功能应该是一个很好的功能,为什么现在还不太流行呢.可能是我见识的软件太少了) 导航作为引导用户浏览和筛选数据的功能,由于每一个导航记录上都标有记录数,可以很好的体现模块数据的分布情况(为了完成这个目的,可以加入每个导航的记录的百分比).现在来看看现在系统中的一些已有的导航功能. 更加复杂一点的导

常规功能和模块自定义系统 (cfcmms)—044模块导航功能的重构(2)

044模块导航功能的重构(2) 经过分析,可以将一级导航的数据类型分为以下几类: 1.模块实际字段值:例如对于"省份"模块,所属区域是其一个字符串字段,里面放着各个区域的名称. 2.父模块的导航:例如对于"市"模块,可以用省来对其进行导航. 3.某个数值字段的数值区间:可以自定义数值区间来完成分组.经过配置可以完成更加复杂的分组. 4.日期字段根据年,月,日来进行分分组,再可以扩展到比如说最近半月,最近一月,最近半年等的分组. 对于数值字段和日期字段的分组,可以是基

Androidd 移动端地图开发之高德地图全功能系列开发二(搜索模块)

今天这篇博客大概分为 1:模糊搜索(具体行业) 2:天气查询 3:获取地址描述数据(地理编码(地址转坐标)或者 逆地理编码(坐标转地址)) 一.模糊搜索 有时候需求是文本框里输入武汉,就搜索出包含武汉的关键词(如武汉大学,武汉天河机场,武汉等),下面我们来实现. 1.填写高德key 2.导入高德搜索包,我这里用的是(AMap_Search_V3.4.0_20160811.jar) 这里我们就可以开始实现功能,一个文本框输入搜索内容,然后POI模糊搜索. public class MainActi

QGIS在ANDRIOD上利用高德API实现道路导航功能

原文地址:http://blog.51cto.com/osgis/2095328

小程序地图导航功能实现(勾起使用外部高德或者腾讯地图)

原理就是:使用sdk 解析地址成经纬,再唤起小程序地图解析,然后通过这个选择使用外部的地图软件. 首先使用:先去下载腾讯地图sdk,将其引用. 第一步: var QQMapWX = require('../../map/qqmap-wx-jssdk.min.js'); const wxMap = new QQMapWX({ key: '*********' // 必填 }); 第二步:解析地址 //解析地址为经纬 detaiAddress: function (e) { var that = t

Android之高德地图定位

最近在写天气预报的app,写完以后会将源码开源,今天先写app中用到的定位问题,现在定位的SDK有很多高德地图.百度地图.腾讯地图等,腾讯地图没有用过不予评价,高德地图和百度地图对比我觉得从开发平台的给的demo来说,高德地图给的demo中的代码可读性更强,模块整理的也很好,从准确性上说个人觉得高德地图的准确性比百度地图要好很多,以前做的项目中有个导航功能,刚开始老大说用百度地图说用户量大,精度应该也更大,可是事实却不是如此,我记得当时用到了地理编码和反地理编码,误差有时候有1-2公里(不知道现