900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Android高德地图导航or语音播报

Android高德地图导航or语音播报

时间:2021-12-02 09:25:24

相关推荐

Android高德地图导航or语音播报

导航实现主要代码:

public class NaviBaseActivity extends Activity implements AMapNaviListener, AMapNaviViewListener {protected AMapNaviView mAMapNaviView; protected AMapNavi mAMapNavi; protected TTSController mTtsManager; protected AlertDialog.Builder builder; protected AlertDialog dialog; 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(); // mAMapNavi = AMapNavi.getInstance(getApplicationContext()); mAMapNavi.addAMapNaviListener(this); mAMapNavi.addAMapNaviListener(mTtsManager); //设置模拟导航的行车速度 mAMapNavi.setEmulatorNaviSpeed(75); }@Override protected void onResume() {super.onResume(); mAMapNaviView.onResume(); }@Override protected void onPause() {dismissDialog(); 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() {//初始化成功 }@Override public void onStartNavi(int type) {//开始导航回调 Toast.makeText(this, "开始导航", Toast.LENGTH_SHORT).show(); }@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 onCalculateRouteFailure(int errorInfo) {//路线计算失败 Log.e("dm", "--------------------------------------------"); Log.i("dm", "路线计算失败:错误码=" + errorInfo + ",Error Message= " + ErrorInfo.getError(errorInfo)); Log.i("dm", "错误码详细链接见:/api/android-navi-sdk/guide/tools/errorcode/"); Log.e("dm", "--------------------------------------------"); Toast.makeText(this, "errorInfo:" + errorInfo + ",Message:" + ErrorInfo.getError(errorInfo), Toast.LENGTH_LONG).show(); }@Override public void onReCalculateRouteForYaw() {//偏航后重新计算路线回调 }@Override public void onReCalculateRouteForTrafficJam() {//拥堵后重新计算路线回调 }@Override public void onArrivedWayPoint(int wayID) {//到达途径点 }@Override public void onGpsOpenStatus(boolean enabled) {//GPS开关状态回调 }@Override public void onNaviSetting() {//底部导航设置点击回调 }@Override public void onNaviMapMode(int isLock) {//地图的模式,锁屏或锁车 }@Override public void onNaviCancel() {finish(); }@Override public void onNaviTurnClick() {//转弯view的点击回调 }@Override public void onNextRoadClick() {//下一个道路View点击回调 }@Override public void onScanViewButtonClick() {//全览按钮点击回调 }@Deprecated @Override public void onNaviInfoUpdated(AMapNaviInfo naviInfo) {//过时 }@Override public void updateCameraInfo(AMapNaviCameraInfo[] aMapCameraInfos) {}@Override public void onServiceAreaUpdate(AMapServiceAreaInfo[] amapServiceAreaInfos) {}@Override public void onNaviInfoUpdate(NaviInfo 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 onCalculateRouteSuccess(int[] ints) {//多路径算路成功回调 }@Override public void notifyParallelRoad(int i) {if (i == 0) {Toast.makeText(this, "当前在主辅路过渡", Toast.LENGTH_SHORT).show(); Log.d("wlx", "当前在主辅路过渡"); return; }if (i == 1) {Toast.makeText(this, "当前在主路", Toast.LENGTH_SHORT).show(); Log.d("wlx", "当前在主路"); return; }if (i == 2) {Toast.makeText(this, "当前在辅路", Toast.LENGTH_SHORT).show(); Log.d("wlx", "当前在辅路"); }}@Override public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] aMapNaviTrafficFacilityInfos) {//更新交通设施信息 }@Override public void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) {//更新巡航模式的统计信息 }@Override public void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo aimLessModeCongestionInfo) {//更新巡航模式的拥堵信息 }@Override public void onPlayRing(int i) {}@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; }@Override public boolean onKeyDown(int keyCode, KeyEvent event) {if (keyCode == KeyEvent.KEYCODE_BACK) {showNavBackDialog(); return true; }return super.onKeyDown(keyCode, event); }/*** * 返回按钮 dialog提示 */ private void showNavBackDialog() {builder = new AlertDialog.Builder(this); builder.setTitle("提示"); builder.setMessage("确定退出导航?"); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {@Override public void onClick(DialogInterface dialogInterface, int i) {}}); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {@Override public void onClick(DialogInterface dialogInterface, int i) {finish(); }}); dialog = builder.show(); }/*** * 回收dialog */ private void dismissDialog(){if(dialog != null){if(dialog.isShowing()){dialog.dismiss(); }dialog = null; }builder = null; }}

语音播报类:

public class TTSController implements AMapNaviListener {/** * 请替换您自己申请的ID。 * 57b3c4a9 * */ private final String appId = "59a3c892"; public static TTSControllerttsManager; private Context mContext; private SpeechSynthesizer mTts; private boolean isPlaying = false; private LinkedList<String> wordList = new LinkedList(); private final int TTS_PLAY = 1; private final int CHECK_TTS_PLAY = 2; private Handler handler = new Handler() {@Override public void handleMessage(Message msg) {super.handleMessage(msg); switch (msg.what) {case TTS_PLAY:synchronized (mTts) {if (!isPlaying && mTts != null && wordList.size() > 0) {isPlaying = true; String playtts = wordList.removeFirst(); if (mTts == null) {createSynthesizer(); }mTts.startSpeaking(playtts, new SynthesizerListener() {@Override public void onCompleted(SpeechError arg0) {isPlaying = false;handler.obtainMessage(1).sendToTarget(); }@Override public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {}@Override public void onBufferProgress(int arg0, int arg1, int arg2, String arg3) {// 合成进度isPlaying = true; }@Override public void onSpeakBegin() {//开始播放isPlaying = true; }@Override public void onSpeakPaused() {}@Override public void onSpeakProgress(int arg0, int arg1, int arg2) {//播放进度isPlaying = true; }@Override public void onSpeakResumed() {//继续播放isPlaying = true; }}); }}break;case CHECK_TTS_PLAY:if (!isPlaying) {handler.obtainMessage(1).sendToTarget();}break; }}}; private TTSController(Context context) {mContext = context.getApplicationContext(); SpeechUtility.createUtility(mContext, SpeechConstant.APPID+ "=" + appId); if (mTts == null) {createSynthesizer(); }}private void createSynthesizer() {mTts = SpeechSynthesizer.createSynthesizer(mContext,new InitListener() {@Overridepublic void onInit(int errorcode) {if (ErrorCode.SUCCESS== errorcode) {} else {Toast.makeText(mContext, "语音合成初始化失败!", Toast.LENGTH_SHORT); }}}); }public void init() {//设置发音人 mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan"); //设置语速,值范围:[0, 100],默认值:50 mTts.setParameter(SpeechConstant.SPEED, "55"); //设置音量 mTts.setParameter(SpeechConstant.VOLUME, "tts_volume"); //设置语调 mTts.setParameter(SpeechConstant.PITCH, "tts_pitch"); }public static TTSController getInstance(Context context) {if (ttsManager== null) {synchronized (TTSController.class){if(ttsManager== null){ttsManager= new TTSController(context);}}}returnttsManager; }public void stopSpeaking() {if (wordList != null) {wordList.clear(); }if (mTts != null) {mTts.stopSpeaking(); }isPlaying = false; }public void destroy() {if (wordList != null) {wordList.clear(); }if (mTts != null) {mTts.destroy(); }}/**************************************************************************** * 以下都是导航相关接口 ****************************************************************************/ @Override public void onArriveDestination() {}@Override public void onArrivedWayPoint(int arg0) {}@Override public void onCalculateRouteFailure(int arg0) {if (wordList != null)wordList.addLast("路线规划失败"); }@Override public void onEndEmulatorNavi() {}@Override public void onGetNavigationText(int arg0, String arg1) {if (wordList != null)wordList.addLast(arg1); handler.obtainMessage(CHECK_TTS_PLAY).sendToTarget(); }@Override public void onInitNaviFailure() {}@Override public void onInitNaviSuccess() {}@Override public void onLocationChange(AMapNaviLocation arg0) {}@Override public void onReCalculateRouteForTrafficJam() {if (wordList != null)wordList.addLast("前方路线拥堵,路线重新规划"); }@Override public void onReCalculateRouteForYaw() {if (wordList != null)wordList.addLast("路线重新规划"); }@Override public void onStartNavi(int arg0) {}@Override public void onTrafficStatusUpdate() {}@Override public void onGpsOpenStatus(boolean enabled) {}@Override public void onNaviInfoUpdate(NaviInfo naviinfo) {}@Override public void onNaviInfoUpdated(AMapNaviInfo aMapNaviInfo) {}@Override public void updateCameraInfo(AMapNaviCameraInfo[] infoArray) {}@Override public void onServiceAreaUpdate(AMapServiceAreaInfo[] infoArray) {}@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 onCalculateRouteSuccess(int[] routeIds) {}@Override public void notifyParallelRoad(int parallelRoadType) {}@Override public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo aMapNaviTrafficFacilityInfo) {}@Override public void OnUpdateTrafficFacility(AMapNaviTrafficFacilityInfo[] infos) {}@Override public void OnUpdateTrafficFacility(TrafficFacilityInfo trafficFacilityInfo) {}@Override public void updateAimlessModeStatistics(AimLessModeStat aimLessModeStat) {}@Override public void updateAimlessModeCongestionInfo(AimLessModeCongestionInfo aimLessModeCongestionInfo) {}@Override public void onPlayRing(int type) {}}

activity :

public class GDNavigationActivity extends NaviBaseActivity{@Override protected void onCreate( Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_gdnavigation); mAMapNaviView = (AMapNaviView) findViewById(R.id.gdn_view); mAMapNaviView.onCreate(savedInstanceState); mAMapNaviView.setAMapNaviViewListener(this); }/*** * mAMapNavi.strategyConvert(congestion, avoidhightspeed, cost, hightspeed, multipleroute); 参数: *@congestion躲避拥堵 *@avoidhightspeed不走高速 *@cost避免收费 *@hightspeed高速优先 *@multipleroute多路径 */ @Override public void onInitNaviSuccess() {super.onInitNaviSuccess(); sList.clear(); sList.add(new NaviLatLng(31.236678,121.46584)); eList.clear(); eList.add(new NaviLatLng(31.200204,121.33324)); int strategy = 0; try {//再次强调,最后一个参数为true时代表多路径,否则代表单路径 strategy = mAMapNavi.strategyConvert(true, false, false, false, false); } catch (Exception e) {e.printStackTrace(); }mAMapNavi.setCarNumber("沪", "DF8888"); mAMapNavi.calculateDriveRoute(sList, eList, mWayPointList, strategy); }@Override public void onCalculateRouteSuccess(int[] ints) {super.onCalculateRouteSuccess(ints); mAMapNavi.startNavi(NaviType.GPS); }}

以上代码拷入工程 即可实现高德导航。权限不要忘了!!!

我不生产代码,我只是代码的搬运工。

转载请注明地址,I firmly believe that the mind is beautiful。

/qq_34062297/article/details/77651097

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。