美文网首页AndroidAndroid开发Android开发
Android开发之MediaPlayer使用

Android开发之MediaPlayer使用

作者: 木子饼干 | 来源:发表于2017-09-07 15:07 被阅读23次

    MediaPlayer

    MediaPlayer是Android系统自带的,可以用来播放音频、视频和流媒体。MediaPlayer包含了Audio和Video的播放功

    常用方法

    方法 说明
    create 创建一多媒体
    getCurrentPosition 当前播放位置
    getDuration 文件的总时间
    getVideoHeight 视频的高度
    getVideoWidth 视频的宽度
    isLooping 是否循环播放
    isPlaying 是否正在播放
    start 开始播放
    pause 暂停
    prepare 准备(同步)
    prepareAsync 准备(异步)
    stop 停止播放
    release 释放相关资源
    reset 重置
    seekTo 指定
    setAudioStreamType 设置类型
    setDataSource 设多媒体数据来源
    setDisplay 设置显示多媒体的载体
    setLooping 是否循环播放
    setOnButteringUpdateListener 网络流媒体的缓冲监听
    setOnErrorListener 错误信息监听
    setOnVideoSizeChangedListener 视频尺寸监听
    setScreenOnWhilePlaying 设置是否保持屏幕常亮
    setVolume 设置音量

    播放实现

    简单步骤

    创建一个MediaPlayer对象,实现start()方法,便可以简单播放音乐

        mPlayer = MediaPlayer.create(this, R.raw.summer);
        mPlayer.start();
    
    具体步骤
    • 先创建MediaPlayer对象;

    • 调用setDataSource()方法来设置音频文件来源;

    • 再调用prepare()/prepareAysnc()方法进行准备;

    • 调用start方法就可以播放音频。

        mediaPlayer = new MediaPlayer();
        mediaPlayer.setDataSource(file.getAbsolutePath());
       mediaPlayer.setOnPreparedListener(this);
        mediaPlayer.prepareAsync();
      
       //setOnPreparedListener(this)实现的方法
       @Override
       public void onPrepared(MediaPlayer mp) {
       mediaPlayer.start();
       }
      

    MediaPlayer实现了四个不同setDataSource()方法

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

    可以从路径,raw,Assets,网络等加载

    实例

    简单实现一个带进度条的音乐播放器


    image.png

    布局文件很简单,一个进度条,三个按钮

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="3dp"
    android:orientation="vertical">
    
    
    <TextView
        android:id="@+id/tv_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="歌曲名"
        android:textSize="20dp"/>
    
    <SeekBar
        android:id="@+id/seek_bar_music"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="0"
        android:progress="0" />
    
    
    <Button
        android:id="@+id/btn_play"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:text="播放" />
    
    <Button
        android:id="@+id/btn_pause"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:text="暂停" />
    
    <Button
        android:id="@+id/btn_stop"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="5dp"
        android:text="停止" />
    
    </LinearLayout>  
    

    具体实现
    点击播放按钮进行播放

            case R.id.btn_play:
    
                if (mPlayer != null) {
                    mPlayer.release();
                    mPlayer = null;
                }
                mPlayer = new MediaPlayer();
                mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                mPlayer.setOnPreparedListener(this);
                try {
                    mPlayer.setDataSource(url);
                } catch (Exception e) {
                    e.printStackTrace();
                }
                mPlayer.prepareAsync();
                break;
    

    OnPrepared准备完成之后,开始播放

          //setOnPreparedListener(this)实现的方法
    @Override
    public void onPrepared(MediaPlayer mp) {
        mp.start();
        timer();
    
    }
    

    点击暂停或停止按钮,暂停或结束播放

       case R.id.btn_pause:
                if (mPlayer.isPlaying()) {
                    mPlayer.pause();
                }
                break;
       case R.id.btn_stop:
                if (mPlayer != null) {
    
                    mPlayer.stop();
                    mPlayer.reset();
                }
                break;

    相关文章

      网友评论

        本文标题:Android开发之MediaPlayer使用

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