•前言

  最近在做一款英文词典的 APP,做到语音模块的时候,我裂开,从网上搜索了各种博客,各种瞎捣鼓,模拟器就是不发音;

  辗转反侧数日,终于让我找到解决之法,接下来就本次测试列出一些需要(必须)解决的问题:

  1. 模拟器如何联网
  2. 模拟器如何安装 TTS 引擎?
  3. 模拟器如何安装已下载好的 apk 文件?

  接下来就这些问题做出一一解答;

•准备工作

  我在 Genymotion 上下载了两个模拟器,分别为 Android 7.0 , Android 8.0 , Android 9.0;

  准备好如下文件,【】;

•模拟器如何联网?

  打开【Oracle VM VirtualBox】,选中 Android 7.0 设备,点击【设置】;

  来到如下界面,选中【网络】->【网卡 1】,点击【高级】,将【混杂模式】更改为全部允许;

  接着打开【网卡 2】,将连接方式更改为【NAT】;

  重启模拟器,打开浏览器输入 www.baidu.com 来检查网络连接情况;

  虽然 WIFI 上有个的感叹号,但丝毫不影响模拟器联网;

  Android 8.0 , Android 9.0 联网同上;

  问题一解决 √;

•模拟器如何安装 apk?

  将下载好的【qq.apk】以拖拽的方式安装到 Android 7.0 上;

  你会发现,他会给你报错;

  意思是说 Genymotion 是基于 X86 的,不支持 ARM 架构,所以基于 ARM 架构 的应用就无法安装。

解决方案

  将【ARM_Translation_low_version.zip】拖拽到 Android 7.0 模拟器中;

  如果出现如下界面:

  恭喜你,安装成功,接下需要你重启该模拟器;

  如果没有出现该界面,那么,就需要检查一下文件路径以及文件名:

  • 文件路径不能包含中文,参考一下我的路径 E:\TTS\ARM_Translation_low_version.zip
  • 文件名不能包含空格,比如把【ARM_Translation_low_version.zip】改成了【ARM_Translation low_version.zip】,这些操作都会导致拖放失败

  此时,再次将【qq.apk】拖拽到 Android 7.0 上,拖放前一定要记得重启模拟器;

  Android 8.0 , Android 9.0 模拟器安装 apk 方式同上,只需要将【ARM_Translation】更改为对应的【ARM】即可;

  问题解决√;

•模拟器如何安装 TTS 引擎?

  解决了第二个问题后,这个岂不变得 so easy~

  将【GoogleTTS.apk】拖放到模拟器上,然后打开【设置】->【无障碍】->【文字转语音(TTS)输出】,

  并将【首选引擎】更改为 Google 文字转语音引擎;

  接下来就是检验阶段,新建一个 TestTTS 项目,添加如下代码;

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <EditText
android:id="@+id/main_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="input something"/> <Button
android:id="@+id/main_btn_speech"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发音" /> </LinearLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {

    private TextToSpeech textToSpeech;
private EditText editText;
private Button mBtnSpeech; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); editText = findViewById(R.id.main_text);
mBtnSpeech = findViewById(R.id.main_btn_speech); textToSpeech = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) { //设置发音的语言
int result = textToSpeech.setLanguage(Locale.ENGLISH); if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
Toast.makeText(MainActivity.this, "发音失败", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(MainActivity.this, "发音成功", Toast.LENGTH_LONG).show();
}
}
}
}); mBtnSpeech.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
textToSpeech.speak(editText.getText().toString(), TextToSpeech.QUEUE_FLUSH, null);
}
});
}
}

  编译运行,自己本地测试一下,我这是可行的。

  由于我找的这个【GoogleTTS.apk】支持的 Android 版本需要 ≥ 8.0,所以,要测试的话,还是要在 Android 8.0 或 Android 9.0 上测试。

•写在最后

  兜兜转转捣鼓了好几天,还好成功了,感谢大佬们写的博客,助我一臂之力;

Android学习之TTS踩坑笔记的更多相关文章

  1. EntityFramework CodeFirst SQLServer转Oracle踩坑笔记

    接着在Oracle中使用Entity Framework 6 CodeFirst这篇博文,正在将项目从SQLServer 2012转至Oracle 11g,目前为止遇到的问题在此记录下. SQL Se ...

  2. CAS5.3服务器搭建与客户端整合SpringBoot以及踩坑笔记

    CAS5.3服务器搭建与客户端整合SpringBoot以及踩坑笔记 cas服务器的搭建 导出证书(1和2步骤是找了课程,随便写了一下存记录,不过对于自己测试不投入使用应该不影响) C:\Users\D ...

  3. ES踩坑笔记

    现在开始在业务上使用ES,记录一些踩坑经历,做点笔记. 2018-11-13 source不返回问题 使用了角色校验,客户端插入成功之后获取数据没有source,和查询参数无关. 检查mapping, ...

  4. Vue3.x+element-plus+ts踩坑笔记

    闲聊 前段时间小颖在B站找了个学习vue3+TS的视频,自己尝试着搭建了一些基础代码,在实现功能的过程中遇到了一些问题,为了防止自己遗忘,写个随笔记录一下嘻嘻 项目代码 git地址:vue3.x-ts ...

  5. 微信小程序使用pako.js的踩坑笔记

    问题 今天组长跟我们讨论了个问题,说是文章存储占用有点大,消耗宽带流量费,让我看看能不能找个方法解决一下(文章存储的是html字符串).第一反应是没什么头绪,能想到的就是将相同的字符串替换成一个标识之 ...

  6. Android 之 ToolBar 踩坑笔记

    写在前面 •前言 这两天,学完了 Fragment 的基础知识,正准备跟着<第一行代码>学习制作一个简易版的新闻应用: 嘀嘀嘀~~~ 一声消息传来,像往常一样,打开 QQ,当我看到 QQ ...

  7. 开始更新webpack踩坑笔记

    今天开始学习webpack,记录下踩过的坑-zxf

  8. TypeScript|Angular踩坑笔记

    今天按照Angular官网玩了下demo程序,踩了个小坑,记录下. TypeScript可以将变量申明为自定义类型,同时也不对该类型进行检查(不像C#,如果没有这个类型会报错) 比如下面这样: 如果我 ...

  9. clickhouse源码Redhat系列机单机版安装踩坑笔记

    前情概要 由于工作需要用到clickhouse, 这里暂不介绍概念,应用场景,谷歌,百度一大把. 将安装过程踩下的坑记录下来备用 ClickHouse源码 git clone安装(直接下载源码包安装失 ...

随机推荐

  1. Linux开发环境搭建——deepin系统的使用

    上大学的时候就在自己的笔记本上安装过深度操作系统(deepin),当时好像是15.x的版本.毕业后第一家公司是全Mac办公,因在学校期间有过完全Linux环境下的开发体验,上手Mac非常快.非常爽.前 ...

  2. django常用模板语言

    一.变量 django模板接收到从后端传来的参数,放入模板中对应的变量中#django代码 def info(request): .... return render(request,'info.ht ...

  3. LevelDB 源码解析之 Varint 编码

    GitHub: https://github.com/storagezhang Emai: debugzhang@163.com 华为云社区: https://bbs.huaweicloud.com/ ...

  4. 记一次metasploitable2内网渗透之21,22,23,25端口爆破

    Hydra是一款非常强大的暴力破解工具,它是由著名的黑客组织THC开发的一款开源暴力破解工具.Hydra是一个验证性质的工具,主要目的是:展示安全研究人员从远程获取一个系统认证权限. 目前该工具支持以 ...

  5. PAT B1033 旧键盘上的几个键又毁坏了,于是在输入一段文字时,对应得的字符就不会出现。

    题中可用的字母包括大小写(给出的坏键的字母,全为大写),数字,"_" "," "." "-" "+" ...

  6. Java编程语言学习01-编写第1个Java程序

    JVM/JRE/JDK JVMJava虚拟机(Java Virtual Machine)它是运行所有Java程序的虚拟计算机有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上 ...

  7. JAVAEE_Servlet_12_获取前端页面请求方式 HttpServletRequest HttpServletResponse

    获取前端页面请求方式 * 前端页面发送的请求方式应该是后端服务器需要的请求方式保持一致,若不一致应该提示错误信息. * 获取到前端的请求方式之后通过if语句进行判断, if("GET&quo ...

  8. Day01_04_Java标识符命名规范

    Java标识符命名规范 什么是标识符? 在程序中程序员有权利自己命名的单词都是标识符(类名 方法名 变量名 常量名 接口名) 标识符命名规则 标识符用作给变量.类和方法命名 标识符以由大小写字母.数字 ...

  9. Day01_09_数据类型

    数据类型 数据类型分类 *基本数据类型 *引用数据类型 基本数据类型 --第一类 整数型 byte short int long --第二类 浮点型 float double --第三类 布尔型 bo ...

  10. centos7安装kubernetes k8s 1.16

    #初始化服务器 echo 'export LC_ALL="en_US.UTF-8"' >> /etc/profile source /etc/profile #!/bi ...