前言

  学习android一段时间了,为了进一步了解android的应用是如何设计开发的,决定详细研究几个开源的android应用。从一些开源应用中吸收点东西,一边进行量的积累,一边探索android的学习研究方向。这里我首先选择了jwood的 Standup Timer项目。本文将把研究的内容笔记整理,建立一个索引列表。

MediaPlayer

  在standup timer中需要用到多媒体的铃声提醒,它是采用MediaPlayer类进行具体操作。android 中mediaPlayer主要用于对多媒体:audio/video 音频和视频的控制。关于 Mediaplayer的详细介绍可以参考SDK上的详细说明和 使用。MediaPlayer有着各种不同的状态,状态间的转换是通过创建MediaPlayer实例或调用各种方法实现的。需要注意的是在有些状态下,某些方法成员是不能被调用的,否则将抛出异常。
  1. 当MediaPlayer 的实例被创建或运行了reset()方法重置后,它就处于Idle 的闲置(?)状态。在此状态下,大多数MediaPlayer的方法不能被调用,例如:getCurrentPosition(),getDuration(),getVideoHeight(),getVideoWidth(),setAudioStreamType(int),setLooping(boolean),setVolume(float, float),pause(),start(),stop(),seekTo(int),prepare()orprepareAsync()。如果调用会抛出异常。
  2. 一旦调用release()方法,MediaPlayer将处于 End状态
  3. 通过设置MediaPlayer数据源的方法 setDataSource(),完成MediaPlayer实例的初始化。
  4. 初始化后,必须使Mediaplayer进入perpared(准备就绪)状态,才可以进入我们熟悉的开始播放、暂停、停止等状态。进入准备状态有两种方式:同步prepare()或者异步prepareAsync()
  5. 进入Perpared状态后,调用start()方法将进入Started播放状态。在播放过程中调用对应的方法可以进入 Paused状态 和Stopped状态,且可以通过start()、pause()、Stop()方法相互切换(注意在Stopped状态下,不直接能进入Started状态,但可以通过Prepared状态来间接进入)。
  6. 如果资源文件播放完成,MediaPlayer将自动进入PlaybackCompleted。
     在Standup Timer 中只是使用MediaPlayer进行简单的铃声提醒,编码较为简单。另外我还写过一个关于Mediaplayer的例子,是一个简单的音乐播放器—— MusicPlayer(有兴趣的可以浏览一下)。

准备资源文件

在编码前,先把音频文件导入到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学习笔记索引

更多相关文章

  1. Android(安卓)调用微信登陆、支付、分享,出现的白屏、黑屏、闪屏
  2. Android中Intent的使用示例
  3. Android(安卓)adb命令的使用
  4. 在Android(安卓)中使用KSOAP2调用WebService(一)
  5. Android(安卓)Recovery 解析
  6. android JNI调用
  7. Android之A面试题③应用程序启动过程源代码分析
  8. WebView---Android与js交互实例
  9. Unity Android交互过坑指南

随机推荐

  1. Android中属性gravity和layout_grativy的
  2. Android ExpandableListView的使用
  3. SQLite 锁机制与事务简介
  4. 【Android】Android控件之Seekbar拖动条
  5. android linearlayout 把控件view置底部(
  6. Android 自定义圆角按钮
  7. android中设置分隔线几种方法
  8. Android 中的盒子模型
  9. Android常用布局属性
  10. 我的Android进阶之旅------>Android 众多