大家好,最近才开始写博客,准备先整理一下学习安卓以来,自己做的一些“小玩意”,在回顾知识的同时,也希望可以帮助到有需要的开发者们!!嘻嘻,开始吧!

计算器的实现,并不是这个“小玩意”的重点,同时,我也相信很多初级开发者都可以开发出比我这个计算器功能更加强大,界面更加炫酷的计算器,所以这篇文章主要是介绍实现计算器的有声效果!记得刚实现的时候,觉得好玩,对着扣了好多666!!!哈哈哈哈!!!

语音播放原理

关于实现有声效果,涉及到的核心类就是TextToSpeech,没用过这个类的可以去看下API,类的关系如下

可以看到这是一个直接继承于Object的类。构造方法也比较简单,如下:

下面解释的很清楚,第一个方法是使用默认的TTS引擎,也就是手机自带的。第二个方法,是使用指定的TTS引擎,可以看到第三个参数用来指定用什么引擎

再看看看常用的一些方法

setPitch--设置音调,音调越高,越接近女声,为1.0时,正常播放音调,高于1.0,越尖音,低于1.0,越低音

setSpeechRate--设置语音播报的速率,为1.0时,正常播放速率,高于1.0,快播,低于1.0,慢播

setVoice--设置声音,传入一个Voice对象即可,可以用TextToSpeech的getVoices()来获取Voice对象

shutdown--释放引擎资源

stop--停止当前的语音播放,使用时,在shutdown方法之前,也就是先stop再shutdown

此外还有setLanguage等方法,用法也比较简单,就不赘述了。

核心方法:speak

 

可以看到官方文档说的非常清楚,这个方法已经被弃用了,所以我们在使用的时候就不要用这个方法了,用这个

参数一:text  要播放的文字

参数二:播放策略,采用队列的方式,一共有两个值QUEUE_ADD和QUEUE_FLUSH,是什么意思呢?假设一个情况,当前tts正在播放语音当中,还需要一段时间才可以放完,如果为QUEUE_ADD,那么此时新播放的语音将会在当前语音播放完了才播放,如果为QUEUE_FLUSH,那么将会终止当前的语音播放,立即播放需要播放的语音。可以很容易联想到这里是使用的队列来管理的。

参数三:一般情况下可以为空,官方文档解释是,用于传递特定引擎参数。

参数四:用于指定当前这次的请求的唯一性。

好了,TextToSpeech了解的差不多了,还需要知道的是,TextToSpeech初始化引擎用到的一个接口OnInitListener

回调方法init()方法会返回一个status,用于判断是否成功,一般在这里设置语言以及对语言设置失败的情况进行处理,代码如下

计算器的实现

然后计算器的实现,我就不多说了,网格布局,,或者普通的线性布局也可以,模仿一下常用计算器的界面,然后可以封装一个用于播放的方法类,这样代码简洁点,由于代码量都很少,不过十行的事,基本把我上面说的了解了,自己动手写没什么问题,相关的代码也都是重复的,一些按钮的点击事件,所以就没必要贴了。

不过除了界面之外,要想实现一个完整的计算器的逻辑还是需要花点功夫的,比如

(1)减号不仅可以作为减号,还可以作为负号(细枝末节的问题比较多,这里仅列举一个作为参考)

(2)连续运算,连 加/减/乘/除 的的实现(考验基本功的时候到咯)

(3)数值范围以及数值精度的处理(数值精度问题提醒一下,BigDecimal)

当然还会有其它的很多问题,那就不是本文的重点啦!!

温馨提示

如果按照本文的思路,最后发现文字没有转化成语音播放,比如我之前的红米手机,/呜呜呜,当时搞了好久,不过我都为你把坑填平啦,请检查你的手机是否有如下问题!

(1)音量没打开,静音怎么可能听得到!(我当时还真以为是代码的问题!-.-||)

(2.)检查是否支持中文的TTS(文字转语音)输出,怎么查看呢,打开手机的设置-->>语言和输入法-->>文字转语音(TTS)输出,点开你会看到你手机目前支持的TTS引擎,我当时系统默认的引擎是不支持中文的,结果,我代码改了N遍,,,,你懂的,,,都是泪啊,总之有遇到的希望这篇文章能帮你跳过这个坑就行。

当然肯定又有小伙伴问,要是我的手机TTS输出默认不支持中文,这可怎么办呀,答案就是,点击科大讯飞,进入官网下载语音引擎,安装在手机上即可,然后,进入手机的设置,你会发现,有一项就是刚才安装的科大讯飞语音引擎,然后设置当前语音引擎为科大讯飞的即可。

如果你顺利完成了上述操作,那么还在等什么,运行APP扣666啊!!!!

最后再放一张我当时最后完成的效果吧!轻喷,原谅我当时还是初学者(以及这个配色)!!

好辣,今天就到这吧!!下次见!!

源码下载

有声计算器源码下载

 

安卓开发个人小作品(1) - 有声计算器相关推荐

  1. 安卓开发个人小作品(2)- QQ简仿

    个人小作品系列,这次继续介绍自己曾经写的一些"小玩意",这次就介绍下自己初学安卓时,写的一个简仿QQ吧. 里面都是一些基础知识,但是作为初学者来说,还是可以学到很多东西的. 由于这 ...

  2. 安卓开发入门小程序!一个本科渣渣是怎么逆袭从咸鱼到Offer收割机的?灵魂拷问

    开头 1.一定要把基本的数据结构,经典的算法,Unix编程,程序编译链接及计算机原理等基础知识扎牢,这些会长远影响你的职业发展. 2. 推荐从C语言入门,不单是因为很多操作系统.网络协议栈开源代码由C ...

  3. 安卓开发小知识 - 3

    内容来源:Android Development Tidbits // No. 3 这是第三次分享安卓开发中的一些小知识点.我们很高兴有这么多人知道了这个有趣的系列,并且对你们通过评论和邮件表达的支持 ...

  4. 安卓开发大作业_罗湖小程序开发制作价格低

    罗湖小程序开发制作价格低 深圳市驰骋网络技术有限公司 驰骋网络提供外观结构设计+软硬件+APP+云服务 一站式开发服务 小程序开始走入了人们的视线,由于其独特的便捷性,给我们的生活提供了非常大的帮助, ...

  5. 腾讯优测干货精选| 安卓开发新技能Get -常用必备小工具汇总

    文/腾讯公司 陈江峰 优测小优有话说: 移动研发及测试干货×××?腾讯优测-优社区你值得拥有~ 开发同学们都知道,安卓开发路上会碰到很多艰难险阻,一不小心就被KO.这时候,没有新技能傍身怎么行?今天我 ...

  6. 安卓开发学习日记第四天番外篇_用Kotlin炒冷饭——越炒越小_莫韵乐的欢乐笔记

    安卓开发学习日记第四天番外篇--用Kotlin炒冷饭--越炒越小 前情提要 安卓开发学习日记第一天_Android Studio3.6安装 安卓开发学习日记第二天_破坏陷阱卡之sync的坑 安卓开发学 ...

  7. 解决uniapp开发微信小程序预览pdf文件ios\安卓兼容问题

    问题 项目需要用uniapp来开发微信小程序,其中,有一个功能是预览pdf, 后台以链接形式返回pdf地址,一开始使用web-view做链接跳转,但是出现ios文件可以正常打开,android打不开的 ...

  8. 微信小程序开发之路(十一)微信小程序第一个计算器项目搭建(centos8)

    微信小程序开发之路(十一)计算器项目搭建(centos8) pip install django django-admin startproject weixintest cd weixintest ...

  9. 安卓开发实战,用HMS MLKit华为机器学习服务开发一个拍照翻译小程序

    文章目录 引子 想象中的旅游 实际中的旅游 太难了 拍照翻译帮你忙 文本识别 翻译 拍照翻译APP开发实战 1 开发准备 1.1 在项目级gradle里添加华为maven仓 1.2 在应用级的buil ...

最新文章

  1. 好多Javascript日期选择器呀-6
  2. Eclipse Color Theme
  3. cvMinMaxLoc函数实例
  4. 用Python做垃圾分类
  5. 基于SLIC分割的特征点检测
  6. php 中 相关文章 的思路,WordPress实现推荐相关文章功能代码
  7. 项目管理与项目组合管理的不同
  8. PHP微信公众号支付弹出“NaN:undefined”解决方法
  9. TCP/IP模型背后的内涵(二)
  10. Win10安装python扩展的几种方式
  11. Hadsky_v6.4.2轻论坛短信插件
  12. windows用虚拟机vmWare安装黑苹果及注意事项
  13. Python学习笔记4——csv/excel文件读写保存
  14. 二分法和牛顿迭代法求平方根(Python实现)
  15. python 线程池 concurrent.futures ThreadPoolExecutor
  16. 今日头条这么火,主要解决了用户的哪些基本痛点
  17. 微信每日定时推送消息新闻到群聊或朋友
  18. Java中“||”与“|”的区别【JAVA基础】
  19. 第一天:Hbase 概述
  20. 我国各省市县的名称列表

热门文章

  1. 关于HDR的学习笔记
  2. 计算机软考答题卡填涂格式,全国计算机软考网络工程师填涂答题卡须知
  3. Graph Visualization and Navigation in Information Visualization: A Survey 译文
  4. MYSQL 递归树表函数
  5. JSON是什么?对JSON的简单理解
  6. Flink 异常 - 9.The heartbeat of TaskManager with id container timed out 分析与 Heartbeat 简介
  7. python中的subprocess.Popen()使用
  8. 100部未看过的电影【20181121更新】
  9. 说说如何安装与配置 jBPM4 开发环境
  10. java农夫过河_农夫过河问题(java版)