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

android采用语音文件形式让TextView和EditText发出声音

2014-01-10 15:10 453 查看
让TextView和EditText发出声音在拨打电话等应用中很常见,如果采用TTS语音引擎未免太麻烦!所以可以采用MediaPlayer播放语音文件的形式

下面是关键代码:

关键变量定义

private TextView numInput;
private int length = 0; //当前字符串长度
private int beforeLength = 0;//上一次字符串长度
private MediaPlayer mediaPlayer;
private ArrayList<TextWatcher> mListeners = null;
EditTextWatchTEL watch;
初始化使用方法

watch = new EditTextWatchTEL();
numInput.addTextChangedListener(watch);
if (mListeners == null) {
mListeners = new ArrayList<TextWatcher>();
}
mListeners.add(watch);


主要代码

private class EditTextWatchTEL implements TextWatcher {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
if (length > 0) {
if (beforeLength <= length) {
beforeLength = length;
List<String> list = new ArrayList<String>();
for(int i=0;i<10;i++){
list.add(String.valueOf(i));
}
String num = numInput.getText().toString().substring(beforeLength - 1);
if(list.contains(num))
{
int value = Integer.parseInt(num);
switch (value) {
case 0:
if(mediaPlayer!= null){  //一定要清空播放器资源
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null ;
}
//R.raw.zero 为raw文件夹的语音文件 ,以下同上
mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.zero);
mediaPlayer.start();
break;
case 1:
if(mediaPlayer!= null){  //一定要清空播放器资源
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null ;
}
mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.one);
mediaPlayer.start();
break;
case 2:
if(mediaPlayer!= null){  //一定要清空播放器资源
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null ;
}
mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.two);
mediaPlayer.start();
break;
case 3:
if(mediaPlayer!= null){  //一定要清空播放器资源
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null ;
}
mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.three);
mediaPlayer.start();
break;
case 4:
if(mediaPlayer!= null){  //一定要清空播放器资源
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null ;
}
mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.four);
mediaPlayer.start();
break;
case 5:
if(mediaPlayer!= null){  //一定要清空播放器资源
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null ;
}
mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.five);
mediaPlayer.start();
break;
case 6:
if(mediaPlayer!= null){  //一定要清空播放器资源
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null ;
}
mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.six);
mediaPlayer.start();
break;
case 7:
if(mediaPlayer!= null){  //一定要清空播放器资源
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null ;
}
mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.seven);
mediaPlayer.start();
break;
case 8:
if(mediaPlayer!= null){  //一定要清空播放器资源
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null ;
}
mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.eight);
mediaPlayer.start();
break;
case 9:
if(mediaPlayer!= null){  //一定要清空播放器资源
mediaPlayer.stop();
mediaPlayer.release();
mediaPlayer = null ;
}
mediaPlayer = MediaPlayer.create(getApplicationContext(), R.raw.nine);
mediaPlayer.start();
break;
default:
break;
}
}
} else {
beforeLength = length;
}
}
}

@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
length = numInput.getText().length();
}
}
//移除监听
public void removeTextChangedListener(TextWatcher watcher) {
if (mListeners != null) {
int i = mListeners.indexOf(watcher);
if (i >= 0) {
mListeners.remove(i);
}
}
numInput.removeTextChangedListener(watcher);
}

@Override
protected void onDestroy() {
removeTextChangedListener(watch);
super.onDestroy();
}
记录与分享,让你我共成长!欢迎查看我的其他博客;我的博客地址:http://blog.csdn.net/caicongyang
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: