美文网首页
音乐播放器

音乐播放器

作者: Anwfly | 来源:发表于2019-11-10 22:40 被阅读0次

    一.MediaPlayer简介
    Android多媒体中的——MediaPlayer,我们可以通过这个API来播放音频和视频
    该类是Androd多媒体框架中的一个重要组件,通过该类,我们可以以最小的步骤来获取,解码 和播放音视频。

    二.MediaPlayer的使用

    1. 想使用该类,需要先创建对象,以下是两种创建对象的方式:
      a、可以使用直接new的方式: MediaPlayer mp = new MediaPlayer();
      b、使用create的方式:MediaPlayer mp = MediaPlayer.create(this, R.raw.test);

    2. MediaPlayer要播放的文件主要包括3个来源:
      a. 用户在应用中事先自带的resource资源,例如:MediaPlayer.create(this, R.raw.test);
      b. 存储在SD卡或其他文件路径下的媒体文件, 例如:mp.setDataSource("/sdcard/test.mp3");
      c. 网络上的媒体文件,例如:mp.setDataSource("http://www.citynorth.cn/music/confucius.mp3");

    在网易云音乐找到你要下载的歌曲 用网页版打开 复制链接中的歌曲ID 如:
    Mike Zhou - The Dawn (亡灵序曲完美钢琴版) 
    http://music.163.com/#/song?id=476592630
    ID就是476592630
    然后将ID替换到链接 http://music.163.com/song/media/outer/url?id= .mp3 中
    如:http://music.163.com/song/media/outer/url?id=476592630.mp3
    
    1. MediaPlayer的setDataSource一共四个方法:

    setDataSource (String path)
    setDataSource (FileDescriptor fd)
    setDataSource (Context context, Uri uri)
    setDataSource (FileDescriptor fd, long offset, long length)

    其中使用FileDescriptor时,需要将文件放到与res文件夹平级的assets文件夹里,然后使用:

    AssetFileDescriptor fileDescriptor = getAssets().openFd("rain.mp3");

    m_mediaPlayer.setDataSource(fileDescriptor.getFileDescriptor(),fileDescriptor.getStartOffset(), fileDescriptor.getLength());

    来设置datasource

    注意:如果使用系统创建assets文件,查看build.gradle是否有如下配置,如没有,手动添加,否则音乐播放失败:

    android {
        compileSdkVersion 27
        ...
        sourceSets { main { assets.srcDirs = ['src/assets', 'src/assets/'] } }
    }
    

    4.MediaPlayer的常见方法

    Android通过控制播放器的状态的方式来控制媒体文件的播放,其中:

    4.1 prepare()和prepareAsync() 提供了同步和异步两种方式设置播放器进入prepare状态,需要注意的是,如果MediaPlayer实例是由create方法创建的,那么第一次启动播放前不需要再调用prepare()了,因为create方法里已经调用过了;
    4.2 start()是真正启动文件播放的方法;
    4.3 pause()和stop()比较简单,起到暂停和停止播放的作用;
    4.4 seekTo()是定位方法,可以让播放器从指定的位置开始播放,需要注意的是该方法是个异步方法,也就是说该方法返回时并不意味着定位完成,尤其是播放的网络文件,真正定位完成时会触发OnSeekComplete.onSeekComplete(),如果需要是可以调用setOnSeekCompleteListener(OnSeekCompleteListener)设置监听器来处理的。
    4.5 release()可以释放播放器占用的资源,一旦确定不再使用播放器时应当尽早调用它释放资源。
    4.6 reset()可以使播放器从Error状态中恢复过来,重新会到Idle状态。
    4.7 MediaPlayer提供了一些设置不同监听器的方法来更好地对播放器的工作状态进行监听,以期及时处理各种情况,
    

    如: setOnCompletionListener(MediaPlayer.OnCompletionListener listener)、

    setOnErrorListener(MediaPlayer.OnErrorListener listener)等,设置播放器时需要考虑到播放器可能出现的情况设置好监听和处理逻辑,以保持播放器的健壮性。


    mediaplayer.png

    三.实现一个简单的音乐播放器:

    1、创建MediaPlayer实例

    //实例了一个mediaplayer,并给它装在了音乐  
    MediaPlayer mediaPlayer=mediaPlayer.create(this, R.raw.music); MediaPlayer mediaPlayer=new MediaPlayer();
    //创建完实例后,第二步加载资源
    

    2、加载资源文件

    String path=Environment.getExternalStorageDirectory(). getAbsolutePath()+"/music.mp3";

    mediaPlayer.setDataSource(path);

    //如果是setDataSource,那么调用完这个文件之后,音频文件没有真正的加载

    //要调用prepare方法

    //异步的加载方式

    //mediaPlayer.prepareAsync();

    mediaPlayer.prepare();

    //设置循环播放

    mediaPlayer.setLooping(false);

    3、音乐的开始播放和暂停

    通过以上步骤,就可以开始播放咱们的音乐了:

    a、播放音乐:

    mediaPlayer.start();

    b、暂停音乐:

    mediaPlayer.pause();

    c、当音乐停止后需要释放资源

            mediaPlayer.stop();  
    
            mediaPlayer.reset();  
    
            mediaPlayer=null;//回收资源
    

    相关文章

      网友评论

          本文标题:音乐播放器

          本文链接:https://www.haomeiwen.com/subject/nshzbctx.html