储存在不同路径中音乐有不同的获取方式,过程大同小异,结果当然是一样。但是它们最重要的不同点是什么呢
一.应用内的音频文件与视频文件
public void isPlayOrPause(View view){ final ImageButton imageButton= (ImageButton) view if(mediaPlayer==null){ //实例化MediaPlayer //播放应用内 //mediaPlayer = MediaPlayer.create(this, R.raw.love); 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); }
}
视频播放与音乐播放无甚大异,不过是多一个成像的控件设置,我们给它添加一个SurfaceView控件
mediaPlayer.setDisplay(sfv_main.getHolder());这是播放应用内的文件,内存内的文件也只是
改一下它的文件路径
至于另一种播放视频的方式,也比较简单,不过所用布局的控件有所改变,这里用一个VideoView来
装载影像 ,代码如下:
//设置播放源 vv_video = (VideoView) findViewById(R.id.vv_video); vv_video.setVideoPath("填写储存路径即可"); //实例化媒体控制器 MediaController mediaController=new MediaController(this); vv_video.setMediaController(mediaController); mediaController.setMediaPlayer(vv_video);二.手机内的音频文件
手机内得在清单文件中配置可阅读文件权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE">uses-permission>
public void isPlayOrPause(View view){ final ImageButton imageButton= (ImageButton) view; if(mediaPlayer==null){ //播放内存卡中音频文件 mediaPlayer=new MediaPlayer(); //设置类型 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); //设置音源 try { mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/Music/f.mp3")); //准备一下(内存卡) mediaPlayer.prepare(); } catch (IOException e) { e.printStackTrace(); } 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); } } 三.网络上的音频文件
网络权限
<uses-permission android:name="android.permission.INTERNET" />
public void isPlayOrPause(View view){ final ImageButton imageButton= (ImageButton) view; if(mediaPlayer==null){ //实例化MediaPlayer //设置类型 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); //设置音源 try { //播放网络音乐 mediaPlayer.setDataSource(this, Uri.parse("http://192.168.43.135/internet.mp3")); //准备(网络) 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); } } 音乐播放器由一SeekBar作为展示,他的进度随着音乐的播放而前进,当我们对它拖拽时音乐也会相对应
的前进,这时就需要一个线程对它进行操作,同时需要监听到他当前位置
class MyThread extends Thread{ @Override public void run() { super.run(); while(seekBar.getProgress()<=seekBar.getMax()){ //获取当前音乐播放的位置 int currentPosition=mediaPlayer.getCurrentPosition(); //让进度条动起来 seekBar.setProgress(currentPosition); } } }
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); } });