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. MAC机常用快捷键整理表格

    MAC机常用快捷键整理表格 范围 快捷键 说明 图形   (Command 键)在某些 Apple 键盘上,此键也可能为标志()     Control (Control 键)     Alt Opt ...

  2. struts2+Hibernate4+spring3+EasyUI环境搭建之一:准备工作

    SSHE环境搭建第一步:安装软件(经验:安装软件路径最好不要有空格.括弧.中文等特殊符号)1.Jdk72.tomcat73.maven34.MyEclipse10.7 破解及优化设置(设置本地安装jd ...

  3. JDBC学习笔记(3)——复习和练习

    复习和练习 复习部分 一.获取数据库连接 1)方式一 // 获取数据库连接 @Test public void testGetConnection() throws Exception { // 1. ...

  4. (转)定制iOS 7中的导航栏和状态栏

    近期,跟大多数开发者一样,我也正忙于对程序进行升级以适配iOS 7.最新的iOS 7外观上有大量的改动.从开发者的角度来看,导航栏和状态栏就发生了明显的变化.状态栏现在是半透明的了,这也就意味着导航栏 ...

  5. 问题-某个程序改了ICO图标后编译后还是显示老图标?

    问题现象:某个程序改了ICO图标后编译后还是显示老图标? 问题原原:可能是因为系统的缓存问题. 问题处理:把程序的EXE放在别的路径下打开就可以了. 问题相关人员:QQ253120114(朋友)  Q ...

  6. Global.asax.cs介绍

    转载  http://www.cnblogs.com/tech-bird/p/3629585.html ASP.NET的配置文件 Global.asax--全局应用程序文件 Web.config--基 ...

  7. 开源原生JavaScript插件-CJPCD(省市区联动)

    一.前言 上两篇博客笔者对 JavaScript Module 模式,闭包等知识点做了简单介绍之后,我们今天开始正式开发一款属于自己的 JavaScript 插件.由于最近项目刚好用到地区选择这一块的 ...

  8. 【数据库】MySql常用函数梳理

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/5866388.html MySql常用函数梳理: 1:数学函数 使用格式:一般用于插入.修改语句中,直接 函数( ...

  9. 电脑蓝屏分析教程,附工具WinDbg(x86 x64)6.12.0002.633下载

    我们常常在使用电脑中,有时会碰到电脑蓝屏,我们经常束手无策,不知道为什么会蓝屏?有些蓝屏后自动重启能正常进入系统,那么我们就可以借助工具进行分析.而有些可能需要进入到安全模式或者pe系统才会正常,那么 ...

  10. Cygwin解决Windows远程登录linux服务器

    下载地址http://www.cygwin.com/install.html 选择mirror.htnshost.com网站下载的比较快. 安装Cygwin(/X)需要选择的包: openssh(必选 ...