1. 首先,我先把代码放到下面:

 package com.himi.speaker;

 import java.util.Locale;

 import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.speech.tts.TextToSpeech; public class MainActivity extends Activity implements OnClickListener { private Button btn_speak;
private EditText edit_input;
private TextToSpeech tts; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); tts = new TextToSpeech(this, ttsInitListener);
edit_input = (EditText) findViewById(R.id.edit_input);
btn_speak = (Button) findViewById(R.id.btn_speak); btn_speak.setOnClickListener(this);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
if (id == R.id.version) {
Toast.makeText(getApplicationContext(), "这是首版本v1.0\n制作者:任逍遥",Toast.LENGTH_LONG).show();;
}
if (id == R.id.exit) {
finish();
}
return super.onOptionsItemSelected(item);
} public void onClick(View v) { if(edit_input.getText().length() >0 ) {
//朗诵输入文本
tts.speak(edit_input.getText().toString(), TextToSpeech.QUEUE_FLUSH,null ); }else {
tts.speak("Nothing input,Son of a bitch", TextToSpeech.QUEUE_FLUSH,null );
} } //实现这个接口,这是手机发声的朗诵引擎,就像汽车发动机一样,启动运行.用来前面初始化创建TextToSpeech对象的,绑定这个接口实现这个对象可以具备发声的能力
private TextToSpeech.OnInitListener ttsInitListener = new TextToSpeech.OnInitListener() {
public void onInit(int status) {
// 使用美式时区目前不支持中文语音数据库
Locale loc = new Locale("us", "", "");
// 判断是否安装了美式英文朗诵Text-to-Speech Library
if (tts.isLanguageAvailable(loc) == TextToSpeech.LANG_AVAILABLE) {
tts.setLanguage(loc);
} }
}; //OnUtteranceCompletedListener-----API15之后就废弃了 // private TextToSpeech.OnUtteranceCompletedListener ttsUtteranceCompletedListener = new TextToSpeech.OnUtteranceCompletedListener() {
//
// public void onUtteranceCompleted(String utteranceId) {
// // TODO 自动生成的方法存根
//
// }
// }; protected void OnDestory() {
tts.shutdown();
super.onDestroy(); } }

接着我附上activity_main.xml:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.himi.speaker.MainActivity" > <EditText
android:id="@+id/edit_input"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lines="1"
android:hint="@string/input"/>
<Button
android:id="@+id/btn_speak"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/speak"/> </LinearLayout>

下图是在虚拟机上运行效果图的:

这里发现我在虚拟机上可以运行,比如输入"I love you",确实发出英文朗读,但是我把这段程序下载到手机真机上就不能实现朗诵了,

我猜想是真机没有安装这里的TextToSpeech Library这个语言数据库文件,后来我就修改了一段程序试着验证我的猜想:如下:

package com.himi.speaker;

import java.util.Locale;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.speech.tts.TextToSpeech; public class MainActivity extends Activity implements OnClickListener { private Button btn_speak;
private EditText edit_input;
private TextToSpeech tts; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); tts = new TextToSpeech(this, ttsInitListener);
edit_input = (EditText) findViewById(R.id.edit_input);
btn_speak = (Button) findViewById(R.id.btn_speak); btn_speak.setOnClickListener(this);
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
if (id == R.id.version) {
Toast.makeText(getApplicationContext(), "这是首版本v1.0\n制作者:任逍遥",Toast.LENGTH_LONG).show();;
}
if (id == R.id.exit) {
finish();
}
return super.onOptionsItemSelected(item);
} public void onClick(View v) { if(edit_input.getText().length() >0 ) {
//朗诵输入文本
tts.speak(edit_input.getText().toString(), TextToSpeech.QUEUE_FLUSH,null ); }else {
tts.speak("Nothing input,Son of a bitch", TextToSpeech.QUEUE_FLUSH,null );
} } //实现这个接口,这是手机发声的朗诵引擎,就像汽车发动机一样,启动运行.用来前面初始化创建TextToSpeech对象的,绑定这个接口实现这个对象可以具备发声的能力
private TextToSpeech.OnInitListener ttsInitListener = new TextToSpeech.OnInitListener() {
public void onInit(int status) {
// 使用美式时区目前不支持中文语音数据库
Locale loc = new Locale("us", "", "");
// 判断是否安装了美式英文朗诵Text-to-Speech Library
if (tts.isLanguageAvailable(loc) == TextToSpeech.LANG_AVAILABLE)
{
tts.setLanguage(loc);
}
else //如果我的手机没有安装语音数据,程序点击进入之后,就会自动结束
{
finish();
} }
}; //OnUtteranceCompletedListener-----API15之后就废弃了 // private TextToSpeech.OnUtteranceCompletedListener ttsUtteranceCompletedListener = new TextToSpeech.OnUtteranceCompletedListener() {
//
// public void onUtteranceCompleted(String utteranceId) {
// // TODO 自动生成的方法存根
//
// }
// }; protected void OnDestory() {
tts.shutdown();
super.onDestroy(); } }

事实上,我的在真机上,点击进入之后,确实是直接退出程序。

2. 于是,我在手机(小米3)中安装了:SpeechSynthesis Data这个语音数据,安装完了之后

进入:设置 / 全部设置 / 辅助功能 / 文字转语音(TTS)输出

设置完毕之后,手机即可发声.

Android(java)学习笔记117:英文朗诵android App编写实例的更多相关文章

  1. Android Studio 学习笔记(三):简单控件及实例

    控件.组件.插件概念区分 说到控件,就不得不区分一些概念. 控件(Control):编程中用到的部件 组件(Component):软件的组成部分 插件(plugin): 应用程序中已经预留接口的组件 ...

  2. Android自动化学习笔记:编写MonkeyRunner脚本的几种方式

    ---------------------------------------------------------------------------------------------------- ...

  3. Android自动化学习笔记之MonkeyRunner:官方介绍和简单实例

    ---------------------------------------------------------------------------------------------------- ...

  4. Android动画学习笔记-Android Animation

    Android动画学习笔记-Android Animation   3.0以前,android支持两种动画模式,tween animation,frame animation,在android3.0中 ...

  5. Android 数字签名学习笔记

    Android 数字签名学习笔记 在Android系统中,所有安装到系统的应用程序都必有一个数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个permission的pro ...

  6. Android:日常学习笔记(6)——探究活动(4)

    Android:日常学习笔记(6)——探究活动(4) 活动的启动模式 standard模式 standard是活动默认的启动模式,在不进行显示定义的情况下,所有活动都会自动使用这种启动模式. stan ...

  7. Android Studio 学习笔记(一)环境搭建、文件目录等相关说明

    Android Studio 学习笔记(一)环境搭建.文件目录等相关说明 引入 对APP开发而言,Android和iOS是两大主流开发平台,其中区别在于 Android用java语言,用Android ...

  8. android开发学习笔记000

    使用书籍:<疯狂android讲义>——李刚著,2011年7月出版 虽然现在已2014,可我挑来跳去,还是以这本书开始我的android之旅吧. “疯狂源自梦想,技术成就辉煌.” 让我这个 ...

  9. Android:日常学习笔记(9)———探究持久化技术

    Android:日常学习笔记(9)———探究持久化技术 引入持久化技术 什么是持久化技术 持久化技术就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失 ...

  10. Android:日常学习笔记(9)———探究广播机制

    Android:日常学习笔记(9)———探究广播机制 引入广播机制 Andorid广播机制 广播是任何应用均可接收的消息.系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播.通过将 In ...

随机推荐

  1. mysql怎么让一个存储过程定时执行

    比如说每天的12:30执行 查看event是否开启: show variables like '%sche%'; 将事件计划开启: set global event_scheduler=1; 关闭事件 ...

  2. <Chapter 2>2-2-1.用户偏好模式(The User Preferences Pattern)

    在这个模块中我们要创建的应用是一个简单的钟.当一个用户访问这个网站时,这个应用会更具服务器的系统时间显示当前的时间.默认情况下,这个应用使用标准国际时间(UTC)时区显示当前时间.用户可以使用Goog ...

  3. libsvm使用方法总结

    1.所需要软件下载: (1)libsvm(http://www.csie.ntu.edu.tw/~cjlin/libsvm/) (2)python (3)gnuplot 画图软件(ftp://ftp. ...

  4. 第二百六十八天 how can I坚持

    早上看了个电影<我的少女时代>,挺好看的. 下午从四点玩游戏一直玩到现在,也是疯了. 晚上也没有吃饭,是不是太堕落了. 徐斌他同学今天中午过来,做了个饭,也是服了,好难吃. 还没做好准备, ...

  5. 现代程序设计 homework-08

    现代程序设计 homework-08 第八次作业. 理解C++变量的作用域和生命周期 作用域就是一个变量可以被引用的范围,如:全局作用域.文件作用域.局部作用域:而生命周期就是这个变量可以被引用的时间 ...

  6. 问题-Delphi2007跟踪变量时提示“E2171 Variable 'APolygon' inaccessible here due to optimization”

    问题现象:Delphi2007跟踪变量时提示“E2171 Variable 'APolygon' inaccessible here due to optimization” . 问题原因:可能是因为 ...

  7. STC-ISP下载过程

  8. linux系统日常管理

    笔者在前面介绍的内容都为linux系统基础类的,如果你现在把前面的内容全部很好的掌握了,那最好了.不过笔者要说的是,即使你完全掌握了,你现在还是不能作为一名合格的linux系统管理员的,毕竟系统管理员 ...

  9. [置顶] 文件和目录(二)--unix环境高级编程读书笔记

    在linux中,文件的相关信息都记录在stat这个结构体中,文件长度是记录在stat的st_size成员中.对于普通文件,其长度可以为0,目录的长度一般为1024的倍数,这与linux文件系统中blo ...

  10. 在Java中super和this的区别

    摘要:在Java中我们会时常用到super及this的用法,现在我主要来区分一下super.和this.及superL()及this()之间的区别,来对它们的认识和了解: 1.this的用法在Java ...