android多媒体音乐(MediaPlayer)播放器

首先,在AndroidManifest.xml中配置权限

 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

注释:android多媒体音乐的几种来源

1.在andriod的应用中
MediaPlayer.create(this, R.raw.roar);
//mnt/sdcard/手机内存卡
2.放在自己的sd卡中(内存卡)
mediaPlayer.setDataSource(this, Uri.parse("file://mnt/sdcard/1/123.mp3"));
3.在网络上(要知道哪个路径)
 mediaPlayer.setDataSource(this, Uri.parse("http://192.168.43.202:8080/sister.mp3"));

接下来,在Java代码中写

在onCreate方法中写全局变量:
  private  MediaPlayer mediaPlayer;
    private SeekBar seekBar;
private  SurfaceView sv_main_suffce;



  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);
        }

    }

写了一个子线程 extends Thread(seekbar进度条):

class Mythrod extends Thread{
        @Override
        public void run() {
            super.run();
            while (seekBar.getProgress()<=seekBar.getMax()){
              //获取音乐的当前播放位置
                int currentPosition=mediaPlayer.getCurrentPosition();
                seekBar.setProgress(currentPosition);
            }
        }
    }

另建一个类SoundActivity,通过soundPool例化音频池可以实现多种声音一起播放



//实例化音频池
        soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC,0);
    soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
        @Override
        public void onLoadComplete(SoundPool soundPool, int i, int status) {
          //播放
            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);
    }

//销毁音频池soundPool
    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(soundPool!=null){
         //释放内存
            soundPool.release();
            soundPool=null;
        }
    }

你可能感兴趣的:(安卓,android,服务)