android mediaPlayer音频播放器基本用法

来源:互联网 发布:一氧化二氮 淘宝 编辑:程序博客网 时间:2024/04/28 09:17

获得MediaPlayer实例:
1. MediaPlay mediaPlayer=MediaPlayer.create(this,R.raw.test)
2. MediaPlay mediaPlayer=new MediaPlayer();

mediaPlayer播放文件主要有三个来源:
1. 播放内存里的(例如:在项目resource下的raw里的音频文件, MediaPlayer.create(this, R.raw.test));
2.播放sd卡或者其他文件路径下的音频的文件(mediaPlayer.setDataSource(“/sdcard/test.mp3”));
3.播放来自网络上的音频文件(mediaPlayer。setDataSource(“http://www.test.com/music/test.mp3“));

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

下面是代码实例:

public class MainActivity extends AppCompatActivity {    private SeekBar seekBar;    private MediaPlayer mediaPlayer;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        seekBar = (SeekBar) findViewById(R.id.seekBar);        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {            @Override            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {            }            @Override            public void onStartTrackingTouch(SeekBar seekBar) {            }            @Override            public void onStopTrackingTouch(SeekBar seekBar) {                //获取拖动之后的位置                int progress=seekBar.getProgress();                //跳转到拖动位置播放                mediaPlayer.seekTo(progress);            }        });    }    public void isPlayOrPause(View view){        final ImageButton imageButton= (ImageButton) view;        if(mediaPlayer==null){            //实例化MediaPlay            //播放应用内的音频文件            //mediaPlayer = MediaPlayer.create(this, R.raw.roar);            //播放内存卡中音频            mediaPlayer=new MediaPlayer();            //设置类型            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);            try{                //设置声源(内存卡)                mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/Music/roar.mp3"));                //声源(网络)                mediaPlayer.setDataSource(this, Uri.parse("http://192.168.43.135/internet.mp3"));                //准备下(内存卡)                mediaPlayer.prepare();                //准备(网络)                mediaPlayer.prepareAsync();            }catch(IOException e){                e.printStackTrace();            }            //准备完成的监听            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {                @Override                public void onPrepared(MediaPlayer mediaPlayer) {                    mediaPlayer.start();                    //把图标修改为暂停的图标                    imageButton.setImageResource(android.R.drawable.ic_media_pause);                    //获取音乐的总时长                    int duration=mediaPlayer.getDuration();                    //设置进度条的最大值为音乐的总时长                    seekBar.setMax(duration);                    new MyThread().start();                }            });        }else if(mediaPlayer.isPlaying()){            //暂停播放            mediaPlayer.pause();            //把图标修改为播放的图标            imageButton.setImageResource(android.R.drawable.ic_media_play);        }else{            //开始播放音频            mediaPlayer.start();            //把图标修改为暂停图标            imageButton.setImageResource(android.R.drawable.ic_media_pause);        }    }    class MyThread extends Thread{        @Override        public void run() {            super.run();            while(seekBar.getProgress()<=seekBar.getMax()){                //获取当前音乐播放的位置                int currentPosition=mediaPlayer.getCurrentPosition();                //让进度条动起来                seekBar.setProgress(currentPosition);            }        }    }下面是布局文件(xml)<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"    android:layout_width="match_parent" android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    android:orientation="horizontal"    tools:context="ghq.zking.com.ghq_android_26.MainActivity">    <SeekBar        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:id="@+id/seekBar" />    <ImageButton        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:src="@android:drawable/ic_media_play"        android:onClick="isPlayOrPause"        /></LinearLayout>
2 0
原创粉丝点击