首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

详解Android 语音播报实现方案(无SDK)

MediaPlayer 首先创建一个MediaPlayer实例 MediaPlayer player = new MediaPlayer(); 然后设置数据源,这里数据源从assets中获取,当然也可以语音文件放在...}); 2、由于播放的语音文件不止一个,因此需要监听播放完成的状态,在播放完成之后播放下一条语音 player.setOnCompletionListener(new MediaPlayer.OnCompletionListener...代码封装 功能代码分为两部分,一部分是语音序列组成的List,这里是VoiceTemplate; 一部分是播放的功能封装,接收List,然后播放语音,这里叫做VoiceSpeaker; 详细代码见文末...代码使用 比如要播放“支付宝到账十二点一三元”,代码如下 final List<String list = new VoiceTemplate() .prefix("success").../main/java/com/jiangkang/ktools/audio/VoiceTemplate.java 以上就是本文的全部内容,希望对大家的学习有所帮助。

3.8K10

05.视频播放器内核切换封装

05.视频播放器内核切换封装 目录介绍 01.视频播放器内核封装需求 02.播放器内核架构图 03.如何兼容不同内核播放器 04.看一ijk的内核实现类 05.看一exo的内核实现类 06.如何创建不同内核播放器...07.看一工厂类实现代码 08.后期如何添加新的内核 00.视频播放器通用框架 基础封装视频播放器player,可以在ExoPlayer、MediaPlayer,声网RTC视频播放器内核,原生MediaPlayer...onCompletionListener = new IMediaPlayer.OnCompletionListener() { @Override public void...PlayerConstant.MEDIA_INFO_VIDEO_RENDERING_START, 0); mIsPreparing = false; } } } ``` 06.如何创建不同内核播放器 先来看一创建不同内核播放器的代码...简而言之,创建对象的时候只需要传递类型type,而不需要对应的工厂,即可创建具体的产品对象 07.看一工厂类实现代码 抽象工厂类,代码如下所示public abstract class PlayerFactory

2.1K20

2019年Java面试题基础系列228道(6),查漏补缺!

71、Java 中,直接缓冲区与非直接缓冲器有什么区别? 72、Java 中的内存映射缓存区是什么? 73、socket 选项 TCP NO DELAY 是指什么?...欢迎大家关注我的公种浩【程序员追风】,2019年多家公司java面试题整理了1000多道400多页pdf文档,文章都会在里面更新,整理的资料也会放在里面。...69、Java 采用的是大端还是小端? 70、ByteBuffer 中的字节序是什么? 71、Java 中,直接缓冲区与非直接缓冲器有什么区别? 72、Java 中的内存映射缓存区是什么?...78、说出至少 5 点在 Java 中使用线程的最佳实践。 这个问题与之前的问题类似,你可以使用上面的答案。...c)使用线程池 79、说出 5 条 IO 的最佳实践 IO 对 Java 应用的性能非常重要。理想情况,你不应该在你应用的关键路径上避免 IO 操作。

95000

图解ConcurrentHashMap

1 ConcurrentHashMap是什么 Concurrent翻译过来是并发的意思,字面理解它的作用是处理并发情况的 HashMap,在介绍它之前先回顾之前的知识。...2 源码分析 Java7 源码分析 通过 Java7 的源码分析下代码实现,先看下一些重要的成员 ? 上面这些一出来有点接受不了没关系,下面都会介绍到。 接下来从最简单的初识化开始分析 ?...上面的步骤③稍微解释,比如 Thread2 通过查找得知自己要修改的值在0号位置,但在 Thread1 里面又把该值改到了1号位置,如果它还去0号操作那肯定出问题了,所以需要重新确定。...同样是扩容转移,这里的代码比 HashMap 中的 transfer 多了一些操作,在上上篇学习 HashMap 扩容可知,扩容后键值对的新位置要么和原位置一样,要么等于原位置+旧数组的长度,所以画个图来理解下上面代码这么写的原因...上面的代码先找出扩容前后需要转移的节点,先执行转移,然后再把该条链上剩下的节点转移,之所以这么写是起到复用的效果,注释中也说了,在使用默认阈值的情况,只有大约 1/6 的节点需要被 clone 。

65321

Android实现仿QQ登录界面背景动画效果

登录QQ的时候,我们会看到在登录界面的背景不是静态的,而是一段动画效果,刚开始觉得蛮好奇的,现在我们也来实现一这种效果,实现起来还是挺简单的。...实现步骤: 1、自定义CustomVideoView类继承VideoView 2、实现xml布局文件 3、视频文件放入raw目录 4、代码实现动画效果 5、静态效果图展示 实现过程: 1、自定义...videoview" android:layout_width="match_parent" android:layout_height="match_parent" /> 3、视频文件放入...raw目录 [iakcxxnglj.png] 在这里插入图片描述 4、代码实现动画效果 //找VideoView控件 customVideoView = (CustomVideoView...customVideoView.start(); //循环播放 customVideoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener

1.8K30

《Spring敲门砖之基础教程第一季》 第一章(4) Spring 开发工具及开发环境配置

今天,我们在进行正式开发之前,好像把开发工具和开发环境跟大家说一,原本打算这节放在第二章的,但是内容不算太多而且很杂,就放在第一章最后简单的说一,下面一章开始详细的实践讲解。...它还可以当作比较插件用于比较代码。Notepad++是Notepad应用最佳的替代品。 2.Eclipse 有的人超爱Notepad,有的人热恋于Eclipse而不可自拔。...java开发工具之一,尤其在智能代码助手、代码自动提示、重构、J2EE支持、各类版本工具(git、svn、github等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的...下载后在指定位置存储,后面我们开发的过程中会将设置在路径。...下载后,将它放在指定位置,后面我们会将它加载到环境变量里来。 ? sif4视图 这里我们并没有采用maven的方式来进行项目配置,而是采用了最原始的jar依赖方式进行配置开发的。

92470

图解HashMap(一)

从上面的结构可以看出,通常情况HashMap是以数组和链表的组合构成(Java8中链表长度超过8的链表转化成红黑树)。结合上面找手机的例子,我们简单分析HashMap存取操作的心路历程。...O(N);右边采用HashCode的方式27个信箱分类,分类的规则是名字首字母(第一个箱子放不写名字的哥们),保安大哥符合对应姓名的信件放在对应的信箱里,这样员工就不用挨个找了,只需要比对一个信箱里的信件即可...6 源码分析 Java7源码分析 先看下Java7里的HashMap实现,有了上面的分析,现在在源码中找具体的实现。 ?...以上就是HashMap的一些先决条件,接着看平时put操作的代码实现,put的时候会遇到3种情况上面已分析过,看下Java7代码: ?...可以看到,Java8把初始化数组和扩容全写在resize方法里了,但是思路还是一样的,扩容后要转移,转移要重新计算在新表中的位置,上面代码最后一块高能可能不太好理解,刚开始看的我一脸懵逼,看了一张美团博客的分析图才豁然开朗

47422

Java 异常处理的 20 个最佳实践,你知道几个?

Java编程中,Java 的异常处理不单单是知道语法这么简单,它必须遵循标准的 JDK 库,和处理错误和异常的开源代码。 这里我们讨论一些关于异常处理的 Java 最佳实践。...在我们讨论异常处理的最佳实践之前,先让我们了解下几个重要的概念,那就是什么是异常以及异常的分类。 什么是异常?...在你的方法里抛出定义具体的检查性异常 public void foo() throws Exception { //错误方式 } 一定要避免出现上面的代码示例,它破坏了检查性异常的目的。...这个原则隐含地说,你更有可能把它放在低级方法中,在那里你检查单个值是否为空或不适合。而且你会让异常堆栈跟踪上升好几个级别,直到达到足够的抽象级别才能处理问题。...如果你的日志不能定位异常位置,那要日志有什么用呢?

76320

实习杂记(21):LocalBroadcastManager的使用、优点在哪里?

当然数据安全是最重要的, 在动态广播里面,广播的范围仅仅是自己的activity里面才有用,或者是自己定义的view里面才有用,(虽然一般很少有人在自定义view里面放广播,因为涉及到VIEW更新,因为把UI更新放在这个层级来做...,有点虎,),主要说的是范围太小 在静态广播里面,及时APP被关了,如果收到这个消息,还是会有广播的,这个范围太广,就涉及到上面的那个数据安全,而且需要在xml中注册这个接受者,就是receiver属性...继续点击另外的播放,需要自动把上面的暂停了,并且保存相关状态(记录位置,暂停进度条,显示暂停图标等等), 在这样的背景,使用LocalBroadCastManager是可以解决问题的, 下面是item...那个view自身需要做的处理类的相关代码,这份代码只是demo,而且我没有处理相关状态,只是以释放和播放来解决问题,请不要直接使用。...mp.release(); mIsPlaying = false; return true; } }); mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener

86630

2019年Java面试题基础系列228道(1),快看看哪些你还不会?

79、说出 5 条 IO 的最佳实践(答案) 80、列出 5 个应该遵循的 JDBC 最佳实践 81、说出几条 Java 中方法重载的最佳实践?...100、Java 中,怎样才能打印出数组中的重复元素? 101、Java 中如何字符串转换为整数? 102、在没有使用临时变量的情况如何交换两个整数变量的值? 103、接口是什么?...首先需要注意的是 f1、f2、f3、f4 四个变量都是 Integer 对象引用,所以下面的==运算比较的不是值而是引用。装箱的本质是什么呢?...String str = new String("hello"); 上面的语句中变量 str 放在栈上,用 new 创建出来的字符串对象放在堆上,而”hello”这个字面量是放在方法区的。...看看下面代码的执行结果是什么并且比较一 Java 7 以前和以后的运行结果是否一致。

1.1K00

教小师妹快速入门Maven,嘿嘿嘿...

为了达到这一目标,Maven考虑一五个方面的内容: 1、使得构建过程更加容易,方便编译、打包、发布 2、为每个项目提供统一的配置 3、提供优质项目信息 4、最佳开发实践 5、安装和更新第三插件透明化...Maven的优点 Maven中使用约定,约定java代码代码必须放在哪个目录下,编译好的java代码又必须放到哪个目录下,这些目录都有明确的约定。...面试问:Maven是什么 Maven(翻译为"专家","内行")是跨平台的项目管理工具。主要服务于基于Java平台的项目构建,依赖管理和项目信息管理。...约定配置说明: 目录 目的 ${basedir} 存放pom.xml和所有的子目录 ${basedir}/src/main/java 项目的java代码 ${basedir}/src/main/resources...修改仓库 在前面的约定配置中有一项: ~/.m2/repository Maven默认的本地仓库位置。 repository中存放了相关的jar包。

53530

索引失效原理,终于有人讲明白了

比如:没遵循最佳左前缀法则、范围查询的右边会失效、like查询用不到索引等等 但是没有一个人告诉你,索引失效的原理是什么,老哥今天就告诉大家,让你们知其然,还要知其所以然。 ?...其次在a确定的情况,b是相对有序的,因为有序,所以同样可以通过二分查找法找到b=2的位置。...再来看看不遵循最佳左前缀的例子 select * from testTable where b=2 分析如下: 我们来回想一b有顺序的前提:在a确定的情况。...%%叫做:中缀 %放在左边叫做:后缀 没错,这里依然是最佳左前缀法则这个概念 ?...大家可以看到,上面的B+树是由字符串组成的。 字符串的排序方式:先按照第一个字母排序,如果第一个字母相同,就按照第二个字母排序。。。

11.3K112

5.java内存模型详细解析

这样同样的代码, 如果要想在不同的平台运行, 放到相应的平台, 就要修改代码, 而java却不用, 那么java这种跨平台特性是怎么做到的呢?...我们看手册上有局部变量0,1,2,3 0表示的是this, 1表示变量放入局部变量的第二个位置, 2表示放入第三个位置....而实际上这些数字对应的是内存里的地址 当字节码执行引擎执行到第4行的时候,执行到4: iload_1, 我们可以简单理解为程序计数器记录的代码位置是4....我们的方法Math.class是放在方法区的, 由字节码执行引擎执行, 每次执行完一行代码, 字节码执行引擎都会修改程序计数器的位置, 让其向下移动一位 java虚拟机为什么要设计程序计数器呢?...这里面 new User()是放在堆里面的, 在堆中分配了一个内存地址,而user对象是放在方法区里面的. 方法区中user对象指向了在堆中分配的内存空间。

30710

2.1 jvm内存模型

二. java语言的跨平台特性 ? 我们来简单看一java语言是如何实现跨平台的?...这样同样的代码, 如果要想在不同的平台运行, 放到相应的平台, 就要修改代码, 而java却不用, 那么java这种跨平台特性是怎么做到的呢?...0表示的是this, 1表示变量放入局部变量的第二个位置, 2表示放入第三个位置. 1: istore_1 int类型值存入局部变量1-->意思是int a=1; 中的a放入局部变量表的第二个位置...我们的方法Math.class是放在方法区的, 由字节码执行引擎执行, 每次执行完一行代码, 字节码执行引擎都会修改程序计数器的位置, 让其向下移动一位 ?...这里面 new User()是在堆里面new的, 而user对象是放在方法区里面的. ?

39420

Spark系列课程-0020Spark RDD图例讲解

Resilient形容词,形容这个数据集,是有弹性的,弹性什么意思,可以伸缩对吧,你拉他一,他自己可以回到原来的状态对吗?他把这个定语放在这什么意思,说明我们这个数据集是能够自我修复对吧?...,可以参考这个位置,分发Task去执行,执行完之后就得到flatMap这个RDD了 答疑时间,哪不理解 有同学说第五个特性不理解, rdd可以提供最佳的计算位置,task计算的数据本地化 第五个特性...包里面的其他RDD都是这个RDD的子类 image.png 最后总结一点,RDD实际上是不存储数据的 对于初学者的你们来说,今天一天,你们把RDD以为里面是存储数据的,这样便于你们与JAVA开发里面的集合类做类比...我们看到的Driver,Worker他都是一个JVM进程, JVM是什么啊?是不是java虚拟机啊?...如果不写foreach算子,程序并不会执行 image.png 我们可以看一这段代码,这是一段伪代码 sc.textFile他是读一个文件对吧?

59570
领券