Android中用MediaPlay播放音訊和影片

山有木xi發表於2020-03-16

在播放音訊中SoundPool是個很好用的類,但是SoundPool只能播放音訊,且通常只用來播放較短的音訊,這就需要另外的類來實現影片和長音訊的播放,那就是MediaPlay

實現MediaPlay的基本步驟是

  1. 建立MediaPlay物件

  2. 呼叫setDataSource物件這是音訊檔案路徑

  3. 呼叫prepare載入音訊

  4. 呼叫start開始播放

  5. 呼叫pause暫停

  6. 呼叫stop停止播放

而MediaPlay也有其他方法

  • getCurrentPosition,獲得當前播放位置

  • getDuration,獲得播放時長

  • isPlay,判斷是否處於播放狀態

  • release,釋放資源

  • reset,回到最初的狀態

  • seekTo,設定播放位置

  • setVolume,設定音量

    private  MediaPlayer mediaPlayer=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mediaPlayer=new MediaPlayer();
        if(ContextCompat.checkSelfPermission(this,
                Manifest.permission.READ_EXTERNAL_STORAGE)
                != PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);
        }else{
            initMediaPlayer();
        }
        Button btPlayMp3= (Button) findViewById(R.id.btPlayMp3);
        btPlayMp3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(!mediaPlayer.isPlaying()){
                    mediaPlayer.start();
                }
            }
        });
        Button btPauseMp3= (Button) findViewById(R.id.btPauseMp3);
        btPauseMp3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mediaPlayer.isPlaying()){
                    mediaPlayer.pause();
                }
            }
        });
        Button btStopMp3= (Button) findViewById(R.id.btStopMp3);
        btStopMp3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(mediaPlayer.isPlaying()){
                    mediaPlayer.stop();
                    try {
                        mediaPlayer.prepare();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        });
    }
    private void initMediaPlayer(){
        try {
            File file=new File(Environment.getExternalStorageDirectory()+"/music","honor.mp3");
            mediaPlayer.setDataSource(file.getPath());
            mediaPlayer.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if(requestCode==1){
            if(grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){
                initMediaPlayer();
            }else{
                Toast.makeText(this,"未獲得SD卡訪問許可權",Toast.LENGTH_LONG).show();
                finish();
            }
        }
    }
    @Override
    protected void onDestroy() {
        if(mediaPlayer!=null){
            mediaPlayer.stop();
            mediaPlayer.release();
            mediaPlayer=null;
        }
        super.onDestroy();
    }


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2680621/,如需轉載,請註明出處,否則將追究法律責任。

相關文章