android的响铃MediaPlayer
16lz
2021-12-30
前言
学习android一段时间了,为了进一步了解android的应用是如何设计开发的,决定详细研究几个开源的android应用。从一些开源应用中吸收点东西,一边进行量的积累,一边探索android的学习研究方向。这里我首先选择了jwood的 Standup Timer项目。本文将把研究的内容笔记整理,建立一个索引列表。MediaPlayer
在standup timer中需要用到多媒体的铃声提醒,它是采用MediaPlayer类进行具体操作。android 中mediaPlayer主要用于对多媒体:audio/video 音频和视频的控制。关于 Mediaplayer的详细介绍可以参考SDK上的详细说明和 使用。MediaPlayer有着各种不同的状态,状态间的转换是通过创建MediaPlayer实例或调用各种方法实现的。需要注意的是在有些状态下,某些方法成员是不能被调用的,否则将抛出异常。- 当MediaPlayer 的实例被创建或运行了reset()方法重置后,它就处于Idle 的闲置(?)状态。在此状态下,大多数MediaPlayer的方法不能被调用,例如:
getCurrentPosition()
,getDuration()
,getVideoHeight()
,getVideoWidth()
,setAudioStreamType(int)
,setLooping(boolean)
,setVolume(float, float)
,pause()
,start()
,stop()
,seekTo(int)
,prepare()
orprepareAsync()。
如果调用会抛出异常。 - 一旦调用release()方法,MediaPlayer将处于 End状态
- 通过设置MediaPlayer数据源的方法 setDataSource(),完成MediaPlayer实例的初始化。
- 初始化后,必须使Mediaplayer进入perpared(准备就绪)状态,才可以进入我们熟悉的开始播放、暂停、停止等状态。进入准备状态有两种方式:同步
prepare()
或者异步prepareAsync()
- 进入Perpared状态后,调用start()方法将进入Started播放状态。在播放过程中调用对应的方法可以进入 Paused状态 和Stopped状态,且可以通过start()、pause()、Stop()方法相互切换(注意在Stopped状态下,不直接能进入Started状态,但可以通过Prepared状态来间接进入)。
- 如果资源文件播放完成,MediaPlayer将自动进入PlaybackCompleted。
准备资源文件
在编码前,先把音频文件导入到res/raw文件夹下。初始化Mediaplayer
声明: private static MediaPlayer bell = null ;private static MediaPlayer airhorn = null ; 生成实例(在Activity的onCreate里) 代码 private void initializeSounds() {
if (bell == null )
{
Logger.d( " Loading the bell sound " ); //使用此方法创建MediaPlayer,PrePare()已经被调用,MediaPlayer进入PrePared状态
bell = MediaPlayer.create( this , R.raw.bell);
}
if (airhorn == null )
{
Logger.d( " Loading the airhorn sound " );
airhorn = MediaPlayer.create( this ,R.raw.airhorn);
}
}
播放铃声
在Standup Timer里使用了计时器,当达到某时间铃声就会触发MediaPlayer播放预先准备好的铃声。 计时器 代码 protected synchronized void updateTimerValues(){
currentIndividualStatusSeconds ++ ;
if (remainingIndividualSeconds > 0 )
{
remainingIndividualSeconds -- ;
if (remainingIndividualSeconds == warningTime)
{
Logger.d( " Playing the bell sound " );
if (SettingActivity.playSounds( this )) {
// 如果等于设定的警告时间且设置允许警告则播放警告铃声
playWarningSound();
} // if
} else {
if (remainingIndividualSeconds == 0 ) {
Logger.d( " Playing the airhorn sound " );
if (SettingActivity.playSounds( this )) {
// 如果时间等于零,切允许铃声提醒,则播放结束铃声
playFinishedSound();
} // if
} // if
} // else
} // if 播放铃声 private void playWarningSound() {
playSound(bell);
}
protected void playFinishedSound() {
playSound(airhorn);
}
private void playSound(MediaPlayer mp) {
mp.seekTo( 0 );
mp.start();
}
释放资源
使用MediaPlayer一定要记得回收资源 private void destroySounds() {bell.stop();
bell.release();
bell = null ;
airhorn.stop();
airhorn.release();
airhorn = null ;
}
参考文献
MediaPlayer Audio and Video系列索引
Android 开源项目-StandupTimer学习笔记索引更多相关文章
- Android(安卓)调用微信登陆、支付、分享,出现的白屏、黑屏、闪屏
- Android中Intent的使用示例
- Android(安卓)adb命令的使用
- 在Android(安卓)中使用KSOAP2调用WebService(一)
- Android(安卓)Recovery 解析
- android JNI调用
- Android之A面试题③应用程序启动过程源代码分析
- WebView---Android与js交互实例
- Unity Android交互过坑指南