解读Android MediaPlayer 详细使用方法

 
 

MediaPlayer具有非常强大的功能,对音视频的播放均提供了支持,为了保证播放期间系统的正常工作,需要设置"android.permission.WAKE_LOCK"权限。

在MediaPlayer中,根据数据源为元数据、音频文件、音频流的不同情况,有着相应的处理过程。基本的过程如下:

1)播放元数据

如果元数据位于Android工程的“res/raw”文件夹下。播放元数据的过程为:     MediaPlayer mp=MediaPlayer.create(context, R.raw.sound_file_1);     mp.start();

2)播放音频文件

如果音频文件的路径为PATH_TO_FILE,播放音频文件的过程为:     MediaPlayer mp=new MediaPlayer();     mp.setDataSource(PATH_TO_FILE); //设置数据源     mp.prepare();     mp.start();

3)播放音频流

如果音频文件的URL地址为URL_ADRESS,播放音频流的过程为:     MediaPlayer mp=new MediaPlayer();     mp.setDataSource(URL_ADRESS); //设置数据源     mp.prepare();     mp.start();

下面是Android中的一个实例,介绍了Android的MediaPlayer播放器音频文件的播放、暂停、回复、停止等操作的处理流程。需要注意的是,为了获得更好的用户体验,在暂停和恢复播放时,必须对静音模式和独放模式进行处理。          

代码 静音模式和独放模式的处理

public class AudioManagerStub extends Activity                   {                      private final int MP3_TO_PLAY=R.raw.testmp3;                private MediaPlayer mMediaPlayer;                private AudioManager mAudioManager;                private static CTSResult mCTSResult;            …            @Override                protected void onCreate(Bundle savedInstanceState)                    {                            super.onCreate(savedInstanceState);                   //获取音频服务                   mAudioManager=(AudioManager) getSystemService(Context.AUDIO_SERVICE);                            mMediaPlayer=MediaPlayer.create (this, MP3_TO_PLAY); //设置音频源                   mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);//设置流类型                   mMediaPlayer.setLooping(false); //设置是否循环播放                   mMediaPlayer.start(); //开始播放                }                     @Override                protected void onPause()                    {                          super.onPause();                          try                            {                             for (int i=0; i < AudioSystem.getNumStreamTypes(); i++)                                    {                                                 mAudioManager.setStreamMute(i, false); //取消其他音频应用的静音                                 mAudioManager.setStreamSolo(i, false);  //设置为非独放模式                            }                            }                          catch (Exception e)                            {                                mCTSResult.setResult(CTSResult.RESULT_FAIL);                                finish();                        }                   }                @Override                protected void onResume()                  {                    super.onResume();                    try                      {                        for (int i=0; i< AudioSystem.getNumStreamTypes(); i++)                          {                              mAudioManager.setStreamMute(i, true); //设置其他音频应用静音                          mAudioManager.setStreamSolo(i, true); //设置为独放模式                      }                          }                        catch (Exception e)                          {                            mCTSResult.setResult(CTSResult.RESULT_FAIL);                            finish();                            return;                          }                        Intent intent=new Intent();                        intent.setClass(this, AudioManagerStubHelper.class);                        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);                        startActivityForResult(intent, 1);                  }                @Override                protected void onActivityResult (int requestCode, int resultCode, Intent data)                   {                    super.onActivityResult(requestCode, resultCode, data);                    mMediaPlayer.stop(); //停止播放                mMediaPlayer.release(); //释放资源                mCTSResult.setResult(CTSResult.RESULT_OK);                    finish();                  }             }

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。