链接地址:http://www.cnblogs.com/lknlfy/archive/2012/02/26/2368696.html

一、概述

TextToSpeech,就是将文本内容转换成语音,在其他的一些应用中经常可以看到。这个功能还是挺强大的,但是用户利用它来编写应用却很简单。

二、要求

能够将文本内容转换成语音并朗读出来;可以一次全部朗读出来,也可以边写边读;可以将文本保存为语音文件。

三、实现

新建工程MySpeak,修改/res/layout/main.xml文件,在里面添加一个EditText,两个Button和一个CheckBox,完整的main.xml文件如下:

 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3     android:layout_width="fill_parent" 4     android:layout_height="fill_parent" 5     android:orientation="vertical" > 6  7     <EditText  8         android:id="@+id/edittext" 9         android:layout_width="fill_parent"10         android:layout_height="wrap_content"11         />12     13     <Button 14         android:id="@+id/rbutton"15         android:layout_width="fill_parent"16         android:layout_height="wrap_content"17         android:text="朗读"18         />19     20     <Button 21         android:id="@+id/sbutton"22         android:layout_width="fill_parent"23         android:layout_height="wrap_content"24         android:text="保存"25         />26     27     <CheckBox 28         android:id="@+id/checkbox"29         android:layout_width="fill_parent"30         android:layout_height="wrap_content"31         android:text="边写边读"32         android:checked="true"33         /> 34         35 36 </LinearLayout>

修改MySpeakActivity.java文件,设置两个Button按钮的监听和EditText的内容变化监听,完整的MySpeakActivity.java内容如下:

  1 package com.nan.speak;  2   3 import java.util.Locale;  4   5 import android.app.Activity;  6 import android.os.Bundle;  7 import android.speech.tts.TextToSpeech;  8 import android.text.Editable;  9 import android.text.TextWatcher; 10 import android.view.View; 11 import android.widget.Button; 12 import android.widget.CheckBox; 13 import android.widget.EditText; 14 import android.widget.Toast; 15  16  17 public class MySpeakActivity extends Activity  18 { 19     private EditText mEditText = null; 20     private Button readButton = null; 21     private Button saveButton = null; 22     private CheckBox mCheckBox = null; 23     private TextToSpeech mTextToSpeech = null; 24      25     /** Called when the activity is first created. */ 26     @Override 27     public void onCreate(Bundle savedInstanceState)  28     { 29         super.onCreate(savedInstanceState); 30         setContentView(R.layout.main); 31          32         mEditText = (EditText)this.findViewById(R.id.edittext); 33         readButton = (Button)this.findViewById(R.id.rbutton); 34         saveButton = (Button)this.findViewById(R.id.sbutton); 35         mCheckBox = (CheckBox)this.findViewById(R.id.checkbox); 36         //实例并初始化TTS对象 37         mTextToSpeech = new TextToSpeech(this,new TextToSpeech.OnInitListener() 38         { 39  40             @Override 41             public void onInit(int status)  42             { 43                 // TODO Auto-generated method stub 44                 if(status == TextToSpeech.SUCCESS) 45                 { 46                     //设置朗读语言 47                     int supported = mTextToSpeech.setLanguage(Locale.US); 48                     if((supported != TextToSpeech.LANG_AVAILABLE)&&(supported != TextToSpeech.LANG_COUNTRY_AVAILABLE)) 49                     { 50                         displayToast("不支持当前语言!"); 51                     } 52                 } 53             } 54              55         });      56         //朗读按钮监听 57         readButton.setOnClickListener(new View.OnClickListener()  58         { 59              60             @Override 61             public void onClick(View v)  62             { 63                 // TODO Auto-generated method stub 64                 //朗读EditText里的内容 65                 mTextToSpeech.speak(mEditText.getText().toString(), TextToSpeech.QUEUE_FLUSH, null); 66             } 67         }); 68         //保存按钮监听 69         saveButton.setOnClickListener(new View.OnClickListener()  70         { 71              72             @Override 73             public void onClick(View v)  74             { 75                 // TODO Auto-generated method stub 76                  77                 //将EditText里的内容保存为语音文件 78                 int r = mTextToSpeech.synthesizeToFile(mEditText.getText().toString(), null, "/mnt/sdcard/speak.wav"); 79                 if(r == TextToSpeech.SUCCESS) 80                     displayToast("保存成功!");                 81             } 82         }); 83         //EditText内容变化监听 84         mEditText.addTextChangedListener(mTextWatcher); 85          86     } 87      88      89     private TextWatcher mTextWatcher = new TextWatcher() 90     { 91  92         @Override 93         public void afterTextChanged(Editable s)  94         { 95             // TODO Auto-generated method stub 96             //如果是边写边读 97             if(mCheckBox.isChecked()&&(s.length()!=0)) 98             { 99                 //获得EditText的所有内容100                 String t = s.toString();        101                 mTextToSpeech.speak(t.substring(s.length()-1), TextToSpeech.QUEUE_FLUSH, null);102             }103         }104 105         @Override106         public void beforeTextChanged(CharSequence s, int start, int count,107                 int after) 108         {109             // TODO Auto-generated method stub110             111         }112 113         @Override114         public void onTextChanged(CharSequence s, int start, int before,115                 int count) 116         {117             // TODO Auto-generated method stub118             119         }120     }; 121       122     //显示Toast函数123     private void displayToast(String s)124     {125         Toast.makeText(MySpeakActivity.this, s, Toast.LENGTH_SHORT).show();126     }127     128     129     @Override130     public void onDestroy()131     {132         super.onDestroy();133         134         if(mTextToSpeech != null)135             mTextToSpeech.shutdown();//关闭TTS136     }137     138 }

最后,在AndroidManifest.xml文件中加入权限:

1 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

好了,运行该程序:

输入“123456789”,可以听到输入完一个字就马上被朗读出来,

说明:

不知道为什么,在我的一台真机上测试时不能朗读出来,提示说语言不支持,在另一台上可以。

转载于:https://www.cnblogs.com/wvqusrtg/p/5179035.html

Android应用开发提高篇(2)-----文本朗读TTS(TextToSpeech)相关推荐

  1. Android应用开发提高篇(4)-----Socket编程(多线程、双向通信)(转载)

    转自:http://www.cnblogs.com/lknlfy/archive/2012/03/04/2379628.html 一.概述 关于Socket编程的基本方法在基础篇里已经讲过,今天把它给 ...

  2. Android应用开发提高篇(4)-----Socket编程(多线程、双向通信)

    一.概述 关于Socket编程的基本方法在基础篇里已经讲过,今天把它给完善了.加入了多线程,这样UI线程就不会被阻塞:实现了客户端和服务器的双向通信,只要客户端发起了连接并成功连接后那么两者就可以随意 ...

  3. Android NFC开发-理论篇

    Android NFC开发-理论篇 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/CSDN_GYG/article/details/72884849 ...

  4. android 串口开发第二篇:利用jni实现android和串口通信

    一:串口通信简介 由于串口开发涉及到jni,所以开发环境需要支持ndk开发,如果未配置ndk配置的朋友,或者对jni不熟悉的朋友,请查看上一篇文章,android 串口开发第一篇:搭建ndk开发环境以 ...

  5. Android应用开发提高系列(5)——Android动态加载(下)——加载已安装APK中的类和资源...

    前言  Android动态加载(下)--加载已安装APK中的类和资源. 声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://ov ...

  6. Android App开发基础篇—数据存储(SQLite数据库)

    Android App开发基础篇-数据存储(SQLite数据库) 前言:Android中提供了对SQLite数据库的支持.开发人员可以在应用中创建和操作自己的数据库来存储数据,并对数据进行操作. 一. ...

  7. Android应用开发基础篇(12)-----Socket通信(转载)

    转自:http://www.devdiv.com/android_socket_-blog-258060-10594.html 一.概述 网络通信无论在手机还是其他设备上都应用得非常广泛,因此掌握网络 ...

  8. Android UI开发第四十一篇——墨迹天气3.0引导界面及动画实现

    周末升级了墨迹天气,看着引导界面做的不错,模仿一下,可能与原作者的代码实现不一样,但是实现的效果还是差不多的.先分享一篇以前的文章,android动画的基础知识,<Android UI开发第十二 ...

  9. Android系统开发-入门篇

    参见:[视频教程] 写给应用开发的 Android Framework 教程--玩转 AOSP 篇之 Android 系统开发工具推荐 - 掘金 前置条件: android系统源码位于 linux 服 ...

最新文章

  1. cocos creator 获取当前时间_前端开发者入门 Creator 必读吧
  2. mysql @pdept_MySQL 基本管理与常用sql 归结
  3. 微软在你的计算机里隐藏的秘密
  4. 将一个键值对添加入一个对象_细品Redis高性能数据结构之hash对象
  5. weblogic ssrf漏洞复现
  6. ASP.NET MVC视图和控制器之间的传值总结(一)
  7. P3711 仓鼠的数学题(伯努利数)
  8. 安装了一次Linux,哈哈
  9. 数据库 流量切分_私域流量之社群运营技巧,社群运营技巧解析
  10. 等待来自服务器的响应超时_服务器的基本框架结构
  11. Linux进度条的实现
  12. BigDecimal除法,并保留小数后两位
  13. python r语言接口_R语言,python接口rpy2安装的问题
  14. import maven project很慢_你确定 Maven 相关的东西全部了解吗?
  15. 开源库、jar包(要不要重新制造轮子)—— C/C++、Java、Python
  16. Linux平台代码覆盖率测试工具GCOV简介
  17. oozie JAVA Client 编程提交作业
  18. LayoutInflater 总结
  19. 杨玲 徐思 《面向对象程序设计(java)》第十一周学习总结
  20. 人力资源术语英汉对照(zt)

热门文章

  1. 数据仓库 和挖掘的步骤 - oracle
  2. ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则
  3. AsyncToken模式替换通用的Listener模式
  4. java基础—TreeSet集合中储存自定义对象(java集合二)
  5. Spring:笔记整理(1)——HelloWorld
  6. C#中Windows Media Player控件使用实例|方法
  7. [CF353C]Find Maximum(贪心)
  8. Objective-C Runtime 运行时与类的内部构造
  9. [蓝桥杯历届试题] 国庆星期日
  10. linux多线程编程之互斥锁