THis is test for 页首

android的响铃MediaPlayer

前言

  学习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() or prepareAsync()如果调用会抛出异常。
  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

声明:
privatestatic MediaPlayer bell =null;
privatestatic MediaPlayer airhorn =null;

 

生成实例(在Activity的onCreate里)
代码
privatevoid 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播放预先准备好的铃声。
计时器
 
代码
protectedsynchronizedvoid 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
播放铃声
privatevoid playWarningSound() {
playSound(bell);

}
protectedvoid playFinishedSound() {
playSound(airhorn);
}
privatevoid playSound(MediaPlayer mp) {
mp.seekTo(
0);
mp.start();
}

 

释放资源

  使用MediaPlayer一定要记得回收资源
privatevoid destroySounds() {
bell.stop();
bell.release();
bell
=null;

airhorn.stop();
airhorn.release();
airhorn
=null;

}

 

参考文献

系列索引

posted @ 2010-09-06 13:09  DotDot  阅读(5165)  评论(0编辑  收藏  举报
页脚