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" />
布局文件里面添加这个控件(显示导航界面)
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
}
}
将对应的配置文件复制保存到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
}
}
相关文章推荐
- android---简单语音合成
- android---自定义折线图
- android---读取SD卡内容并显示
- android---重写textview自适应屏幕分辨率,压缩字体大小
- android---重写EditText自适应屏幕分辨率,压缩字体大小
- android---世界时区列表
- Android 批量上传图片进度回调
- android---对SharePreferences的封装
- android---瀑布流gridview
- android---防止ListView数据错乱的方法
- android---自定义数字选择器
- android---ScrollView中嵌套ListView
- Android ImageButton,Button,CheckBox等抢了原有View的点击事件 点击事件冲突问题
- android---后台代发短信
- android---service的启动,和activity的通信
- android---broadcastReceiver广播机制
- android---在ScrollView中嵌套ViewPager
- android---多线程(启动,暂停,终止)
- android---控件隐藏与显示动画
- android---图片获得与裁剪