zoukankan      html  css  js  c++  java
  • 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;

    }

    参考文献

    系列索引

  • 相关阅读:
    ios 关闭自动修正输入内容
    Tarjan+缩点【强连通分量】【模板】
    初识Tarjan算法
    【尺取法】【转】
    【先加后减拼凑思想】【合成数问题】
    强连通分量【k 算法、t 算法】
    大数【加减乘除】
    洛谷博客地址【置顶!】
    差分约束+spfa【模板】
    【poj3169】【差分约束+spfa】
  • 原文地址:https://www.cnblogs.com/keyindex/p/1818988.html
Copyright © 2011-2022 走看看