Android如何才能在mediaPlayer中播放30秒的歌曲

时间:2011-09-12 05:55:10

标签: android

我在Android上工作,我正在为音频歌曲创建一个播放器。我想只播放一首歌只需30秒。之后,玩家必须关闭。如果我再次按START按钮,应该重新开始。

这是创建媒体播放器的代码:

    MediaPlayer mediaPlayer = new MediaPlayer();
    public void songPreview(String songURL){

        try{
        mediaPlayer=new MediaPlayer();
        mediaPlayer.setDataSource(songURL);
             mediaPlayer.prepare();
             mediaPlayer.start();

        } catch(Exception ex){
            ex.printStackTrace();
        }
    }

请建议我使用什么代码才能播放我的歌曲30秒后它会停止播放,如果我想再次播放,那么我必须按开始按钮。

注意:请提供我30秒后停止媒体播放器的逻辑。

提前谢谢。

3 个答案:

答案 0 :(得分:10)

使用countdownTimer完成您的目标,您可以手动将倒数计时器设置为30秒。倒计时结束时,它将完成方法并执行完成方法代码 ::

    CountDownTimer cntr_aCounter = new CountDownTimer(3000, 1000) {
        public void onTick(long millisUntilFinished) {

            mp_xmPlayer2.start();
        }

        public void onFinish() {
            //code fire after finish
               mp_xmPlayer2.stop();
        }
        };cntr_aCounter.start();

答案 1 :(得分:6)

private void playSoundForXSeconds(final Uri soundUri, int seconds) {
    if(soundUri!=null) {
        final MediaPlayer mp = new MediaPlayer();
        try {
            mp.setDataSource(Settings.this, soundUri);
            mp.prepare();
            mp.start();
        }catch(Exception e) {
            e.printStackTrace();
        }

        Handler mHandler = new Handler();
        mHandler.postDelayed(new Runnable() {
            public void run() {
               try {
                   mp.stop();
               }catch(Exception e) {
                  e.printStackTrace();
               }
            }
        }, seconds * 1000);
    }
}

答案 2 :(得分:0)

此方法在给定时间后跳转到轨道的末尾,并允许本机onCompleted回调执行其工作。您显然需要扩展代码以处理在播放完成之前触发的任何暂停事件。

    private static void startMedia(final MediaPlayer mediaPlayer, @Nullable Integer previewDuration) {
    mediaPlayer.start();

    if( previewDuration != null) {
        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                mediaPlayer.seekTo(mediaPlayer.getDuration());
            }
        }, previewDuration);
    }
}