android---高德地图(5)导航界面(语音播报)实现

配置工程:实现语音播报的功能需要到科大讯飞官网下载相应的sdk,目前使用到的是语音合成功能(将文本内容转换成语音)
将对应的配置文件复制保存到Libs目录下。添加相应的权限和appkey
<meta-data
            android:name="IFLYTEK_APPKEY"
            android:value="'54be2ada'" />
        <meta-data
            android:name="IFLYTEK_CHANNEL"
            android:value="Android_Demo" />

 
 布局文件里面添加这个控件(显示导航界面)
<com.amap.api.navi.AMapNaviView 
    android:id="@+id/map" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/>

java文件
package com.example.mapdemo;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Window;

import com.amap.api.navi.AMapNavi;
import com.amap.api.navi.AMapNaviListener;
import com.amap.api.navi.AMapNaviView;
import com.amap.api.navi.AMapNaviViewListener;
import com.amap.api.navi.model.AMapNaviInfo;
import com.amap.api.navi.model.AMapNaviLocation;
import com.iflytek.cloud.SpeechConstant;
import com.iflytek.cloud.SpeechError;
import com.iflytek.cloud.SpeechSynthesizer;
import com.iflytek.cloud.SpeechUtility;
import com.iflytek.cloud.SynthesizerListener;
import com.iflytek.sunflower.FlowerCollector;
/**
 * 
 *导航(语音播报)界面
 * 
 * */
public class NaviActivity extends Activity implements
AMapNaviViewListener,AMapNaviListener{
//导航View
private AMapNaviView mAmapAMapNaviView;
//是否为模拟导航
private boolean mIsEmulatorNavi = true;
/**
 * 合成监听器
 */
private SynthesizerListener mTtsListener = new SynthesizerListener() {
@Override
public void onSpeakBegin() {
}

@Override
public void onSpeakPaused() {
}

@Override
public void onSpeakResumed() {
}

@Override
public void onBufferProgress(int percent, int beginPos, int endPos,
String info) {
}

@Override
public void onSpeakProgress(int percent, int beginPos, int endPos) {
}

@Override
public void onCompleted(SpeechError error) {
if(error == null)
{
}
else if(error != null)
{
}
}

@Override
public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {
}
};
 // SpeechSynthesizer对象
private SpeechSynthesizer mTts;
// 播报人名称
private String voicer="xiaoyan";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);    
setContentView(R.layout.naviactivity);
// 初始化  需要填写语音appid
SpeechUtility.createUtility(this, SpeechConstant.APPID+"=54be2ada");
//创建SpeechSynthesizer 对象 第二个参数是设置本地合成  null表示 不使用本地合成 
mTts = SpeechSynthesizer.createSynthesizer(this, null);
/**
 * 参数设置 分别是播报人名称,语音速度,语音音量
 */
mTts.setParameter(SpeechConstant.VOICE_NAME,"xiaoyan");
mTts.setParameter(SpeechConstant.SPEED,"50");
mTts.setParameter(SpeechConstant.VOLUME,"80");
    
//重新监听导航
AMapNavi.getInstance(this).setAMapNaviListener(this);
//初始化导航界面
init(savedInstanceState);
}

/**
 * 使用SpeechSynthesizer合成语音,不弹出合成Dialog.
 * @param
 */
public void playText(String playText) {
if (false) {
return;
}
if (null == mTts) {
// 创建合成对象.
mTts = SpeechSynthesizer.createSynthesizer(this,null);
}
// 进行语音合成.
mTts.startSpeaking(playText, null);

}
/**
 * 
 * @param savedInstanceState
 */
private void init(Bundle savedInstanceState) {
mAmapAMapNaviView = (AMapNaviView) findViewById(R.id.simplenavimap);
mAmapAMapNaviView.onCreate(savedInstanceState);
mAmapAMapNaviView.setAMapNaviViewListener(this);
if (false) {
// 设置模拟速度
AMapNavi.getInstance(this).setEmulatorNaviSpeed(100);
// 启动模拟导航
AMapNavi.getInstance(this).startNavi(AMapNavi.EmulatorNaviMode);
} else {
// 启动实时导航
AMapNavi.getInstance(this).startNavi(AMapNavi.GPSNaviMode);
}
}

//-----------------------------导航回调事件------------------------
/**
 * 导航界面返回按钮监听
 * */
@Override
public void onNaviCancel() {
finish();
}
   
@Override
public void onNaviSetting() {

}

@Override
public void onNaviMapMode(int arg0) {
// TODO Auto-generated method stub

}
@Override
public void onNaviTurnClick() {
// TODO Auto-generated method stub

}

@Override
public void onNextRoadClick() {
// TODO Auto-generated method stub

}

@Override
public void onScanViewButtonClick() {
// TODO Auto-generated method stub

}
/**
 * 
 * 返回键监听事件
 * */
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

if (keyCode == KeyEvent.KEYCODE_BACK) {
finish();
}
return super.onKeyDown(keyCode, event);
}

// ------------------------------生命周期方法---------------------------
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mAmapAMapNaviView.onSaveInstanceState(outState);
}

@Override
public void onResume() {
super.onResume();
//移动数据统计分析
FlowerCollector.onResume(this);
FlowerCollector.onPageStart("TtsDemo");
mAmapAMapNaviView.onResume();

}

@Override
public void onPause() {
super.onPause();
mAmapAMapNaviView.onPause();
//移动数据统计分析
FlowerCollector.onPageEnd("TtsDemo");
FlowerCollector.onPause(this);
AMapNavi.getInstance(this).stopNavi();
}

@Override
public void onDestroy() {
super.onDestroy();
mAmapAMapNaviView.onDestroy();
mTts.destroy();
AMapNavi.getInstance(this).removeAMapNaviListener(this);
}


@Override
public void onArriveDestination() {
// TODO Auto-generated method stub
this.playText("到达目的地");
}


@Override
public void onArrivedWayPoint(int arg0) {
// TODO Auto-generated method stub
}


@Override
public void onCalculateRouteFailure(int arg0) {
// TODO Auto-generated method stub
this.playText("路径计算失败");
}


@Override
public void onCalculateRouteSuccess() {
// TODO Auto-generated method stub
this.playText("路径计算就绪");
}


@Override
public void onEndEmulatorNavi() {
// TODO Auto-generated method stub
}


@Override
public void onGetNavigationText(int arg0, String arg1) {
// TODO Auto-generated method stub
this.playText(arg1);
}


@Override
public void onGpsOpenStatus(boolean arg0) {
// TODO Auto-generated method stub
}


@Override
public void onInitNaviFailure() {
// TODO Auto-generated method stub
}


@Override
public void onInitNaviSuccess() {
// TODO Auto-generated method stub
}


@Override
public void onLocationChange(AMapNaviLocation arg0) {
// TODO Auto-generated method stub
}


@Override
public void onNaviInfoUpdated(AMapNaviInfo arg0) {
// TODO Auto-generated method stub
}


@Override
public void onReCalculateRouteForTrafficJam() {
// TODO Auto-generated method stub
}


@Override
public void onReCalculateRouteForYaw() {
// TODO Auto-generated method stub
}


@Override
public void onStartNavi(int arg0) {
// TODO Auto-generated method stub
}


@Override
public void onTrafficStatusUpdate() {
// TODO Auto-generated method stub
}
}
 
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值