多媒體音樂播放器(MediaPlayer)

我給大家分享一個我寫的一個簡單的音樂播放的功能
說起音樂播放器就會想到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;
        }
    }

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章