您的位置:首页 > 移动开发 > Android开发

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

2016-04-27 19:58 459 查看
配置工程:实现语音播报的功能需要到科大讯飞官网下载相应的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

}
}
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: