Android MediaPlayer音频、视频文件播放

在Android系统中,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();
             }
        }

 扩展阅读:Android基于MediaPlayer的视频播放

 转自:http://www.3g-edu.org/news/art005.htm(华清远见android培训网内部资料)

你可能感兴趣的:(mediaplayer)