android 自动语音提醒,Android 语音播报实现方案
功能描述
类似支付宝收款时候的语音播报功能:当别人扫描你的收款码,你收到钱之后,就会听到“支付宝到账12.55元”的语音播报。
要解决的问题
1.播放单个语音文件
2.播放完单个语音文件之后立即播放下一条,这样才能连续
3.当多个完整的语音序列都需要播报时的处理(比如支付宝短时间内收到多条收款推送)
实现思路
播放单个文件选择MediaPlayer
首先创建一个MediaPlayer实例MediaPlayer player = new MediaPlayer();
然后设置数据源,这里数据源从assets中获取,当然也可以将语音文件放在raw文件夹里fd = FileUtils.getAssetFileDescription(path);
player.setDataSource(fd.getFileDescriptor(), fd.getStartOffset(),fd.getLength());
然后调用 prepareAsync() 方法,异步加载,并设置监听,加载完毕之后开始播放(与 prepare 方法区别开来)player.prepareAsync();
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
由于播放的语音文件不止一个,因此需要监听播放完成的状态,在播放完成之后播放下一条语音player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.reset();
counter[0]++;
if (counter[0]
try {
AssetFileDescriptor fileDescriptor = FileUtils.getAssetFileDescription(String.format("sound/tts_%s.mp3", list.get(counter[0])));
mp.setDataSource(fileDescriptor.getFileDescriptor(), fileDescriptor.getStartOffset(), fileDescriptor.getLength());
mp.prepare();
} catch (IOException e) {
e.printStackTrace();
latch.countDown();
}
} else {
mp.release();
latch.countDown();
}
}
});
短时间多次播报请求,开采用同步方式进行,一条播完播放下一条,这里采用
synchronized + notifyAll() 实现,当然也可以用别的方法。
代码封装
功能代码分为两部分,一部分是语音序列组成的 List,这里是 VoiceTemplate;
一部分是播放的功能封装,接收 List,然后播放语音,这里叫做 VoiceSpeaker;
详细代码见文末。
代码使用
比如要播放“支付宝到账十二点一三元”,代码如下final List list = new VoiceTemplate()
.prefix("success")
.numString("12.13")
.suffix("yuan")
.gen();
VoiceSpeaker.getInstance().speak(list);
源码
KTools:
https://link.jianshu.com/?t=https://github.com/jiangkang/KTools
https://github.com/jiangkang/KTools/blob/master/app/src/main/java/com/jiangkang/ktools/audio/VoiceSpeaker.java
https://github.com/jiangkang/KTools/blob/master/app/src/main/java/com/jiangkang/ktools/audio/VoiceTemplate.java
作者:姜康
链接:https://www.jianshu.com/p/df2022b3937d
声明:本文是 姜康 原创。转载请联系作者获得授权。
android 自动语音提醒,Android 语音播报实现方案相关推荐
- android 自动 键盘,关于Android中的软键盘
InputMethodService为我们的输入法创建了一个Dialog,并且将该Dialog的Window的某些参数(如Gravity)进行了设置,使之能够在底部或者全屏显示.当我们点击输入框时,系 ...
- android自动更新demo,Android程序自动更新功能模块的实现方法【附完整demo源码下载】...
本文实例讲述了Android程序自动更新功能模块的实现方法.分享给大家供大家参考,具体如下: 在程序启动的时候检测服务器上有没有对应版本更新,如果有更新,提示用户是否更新. 在程序启动的时候首先调用更 ...
- android自动创建快捷方式,Android开发之生成桌面快捷方式细则(原创)
本文已独家授权 郭霖 ( guolin_blog) 公众号发布! 申明,标题里的快捷方式不是指开发人员使用频率极高的Ctrl+C和Ctrl+V:也不是IDE里Ctrl+D.Ctrl+F等常用快捷键.这 ...
- android自动夜间模式,Android实现日夜间模式的深入理解
在本篇文章中给出了三种实现日间/夜间模式切换的方案,三种方案综合起来可能导致文章的篇幅过长,请耐心阅读. 1.使用 setTheme的方法让 Activity重新设置主题: 2.设置 Android ...
- android自动切换图片,Android应用中图片浏览时实现自动切换功能的方法详解
先给最终效果图: 当我们在最下边的gallery中切换图片时,上面的大图片会自动切换,切换时有动画效果哦,很简单的一个程序,有待完善更多的功能! activity代码: package cn.com. ...
- Android 自动搜索频道,Android自定义收音机搜台控件RadioRulerView
前言:像这类的自定义控件有非常多的开源项目,但还是没有找到我项目想要的,所以简单实现了一个,下面简单讲讲实现原理. 效果图: 实现思路: 首先画固定背景尺子,而实现这个则要计算刻度线的宽度.刻度线间的 ...
- android 自动挂断,android实现接通和挂断电话
本文实例为大家分享了android实现接通和挂断电话的具体代码,供大家参考,具体内容如下 关键代码:[PhoneUtils类] package com.ebupt.phonerecorddemo.se ...
- android自动添加包,android nfc写入应用程序包名与网址 自动打开应用程序与网址...
安卓手机大部分手机提供了NFC芯片 可以根据NFC传递数据 NFC卡与手机 手机与手机数据等交互 非常好的功能,这篇文章教大家如何向NFC卡或标签写入功能. 用法 : 点击包名 将N ...
- android 自动挂断,android 来电自动接听和自动挂断(2.3以上)
转自http://stephen830.iteye.com/blog/1181786java android 来电自动接听和自动挂断android 注意:android2.3版本不支持下面的自动接听方 ...
- android 自动播放 幻灯片,Android自动播放Banner图片轮播效果
本文实例为大家分享了Android自动播放Banner图片轮播的具体代码,供大家参考,具体内容如下 先看一下效果图 支持本地图片以及网络图片or本地网络混合. 使用方式: android:id=&qu ...
最新文章
- 淘淘经受了一次考验...
- html中全选按钮代码怎么写,html中的javascript 全选/取消全选操作示例代码
- python去实现链表_python实现链表
- Remoting 技术
- mysql merge 分区_mysql merge 分区
- Python全栈工程师(异常(基础))
- CF1137F Matches Are Not a Child‘s Play(树上数据结构问题、树链剖分+ODT)
- java密码框提示_[Java教程]如何实现在密码框如出现提示语
- Minio Docker 单机安装(二种模式) linux
- mysql workbench创建数据库的时候PK,NN等的含义
- 杉岩数据:5种常见容灾复制技术图解
- deepdiff函数返回_Linux diff命令详解
- python把英语句子成分字母_英语基础(一)句子成分和结构
- 大自然Windows XP日文版镜像
- 灯泡窃听,照射出物联网的“深层黑洞”
- js监听苹果手机自带按钮返回事件
- TFT屏的驱动ST7735S使用实例
- csv文件 内容转义_保存csv文件时的生僻字处理和格式控制
- GraphicsView学习-基本图元使用(2)
- i3 1215U 和 i5 1235U选哪个好
热门文章
- 学java进美团_美团实习Java岗面经,已拿offer
- Unknown custom element: <xxx> - did you register the component correctly? For recursive components
- 十大热门经典历史小说,大有希望获得第四届橙瓜网络文学奖
- 河南民办计算机大学排名,2021河南民办大学排名 河南最好的民办本科高校有哪些...
- PostgreSQL数据库统计信息——analyze大致流程
- 风笑天社会研究方法第5版笔记和课后答案
- python灰色关联度分析代码_GRA灰色关联度分析学习 附python代码
- python while无限循环语句_Python While 循环语句
- iOS安装ipa文件
- pandas_计算前复权收盘价和后复权收盘价