配置工程:实现语音播报的功能需要到科大讯飞官网下载相应的sdk,目前使用到的是语音合成功能(将文本内容转换成语音)
将对应的配置文件复制保存到Libs目录下。添加相应的权限和appkey
布局文件里面添加这个控件(显示导航界面)
将对应的配置文件复制保存到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
}
}