首页 > 学院 > 开发设计 > 正文

多媒体音乐播放器(MediaPlayer)

2019-11-08 01:33:32
字体:
来源:转载
供稿:网友

我给大家分享一个我写的一个简单的音乐播放的功能 说起音乐播放器就会想到MediaPlayer这个类 首先音乐的播放来源有三种方式 1.在自己的应用中

MediaPlayer.create(this, R.raw.roar);

2.放在自己的sd卡中(内存卡)

mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/1/roar.mp3"));

3.在网络上(要知道哪个路径)

mediaPlayer.setDataSource(this, Uri.parse("http://192.168.43.202:8080/crickets.mp3"));

我写了一个点击的方法具体如下:

public void onplay(View view) throws IOException { imageButton = (ImageButton) view; if (mediaPlayer==null){ //播放应用的音频文件// mediaPlayer = MediaPlayer.create(this, R.raw.roar); //播放内存卡中的音频文件 mediaPlayer=new MediaPlayer(); //音频流的类型 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); //设置音频的来源// mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/1/roar.mp3"));// mediaPlayer.PRepare();//准备一下 //播放网络音乐 mediaPlayer.setDataSource(this, Uri.parse("http://192.168.43.202:8080/crickets.mp3")); //一步准备 mediaPlayer.prepareAsync(); //设置准备完的监听 mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { //开始播放 mediaPlayer.start(); //点击播放改变图标 imageButton.setImageResource(android.R.drawable.ic_media_pause); //获取音乐的播放最大时间 int durtion=mediaPlayer.getDuration(); //设置进度条的最大值为音乐的播放最大时间 seekBar.setMax(durtion); new Mythred().start(); } }); //给进度条设置一个事件 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); } }); } 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 Mythred extends Thread{ @Override public void run() { super.run(); while (seekBar.getProgress()<=seekBar.getMax()){ //每循环一次就取到当前的位置 int cption=mediaPlayer.getCurrentPosition(); seekBar.setProgress(cption); } } }

千万不要忘加了权限:

<!-- 读取内存卡的权限 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 联网的权限 --> <uses-permission android:name="android.permission.INTERNET" />

我用SoundPool写了一个东西具体代码如下:

//实例化音频池(在这里我设置了只能同时播放4个如果播放第五个,那么第一个就关闭了) soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC,0); soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool, int i, int i1) { //播放 soundPool.play(i,1,1,1,-1,1); } }); public void playKFC(View view){ soundPool.load(this,R.raw.rooster,1); } public void playTwo(View view){ soundPool.load(this,R.raw.chimp,1); } public void playThree(View view){ soundPool.load(this,R.raw.crickets,1); } public void playFour(View view){ soundPool.load(this,R.raw.roar,1); } public void playDog(View view){ soundPool.load(this,R.raw.dogbark,1); } @Override protected void onDestroy() { super.onDestroy(); if(soundPool!=null){ //释放内存 soundPool.release(); soundPool=null; } }

有啥不懂的或不清楚的,可以立即留言问博主


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表