首页 > 解决方案 > 从计时器启动 MediaPlayer

问题描述

我正在开发一个电池警报应用程序。我想使用计时器每隔一分钟使用媒体播放器播放音乐,并且还想在一分钟内重复音乐 2 次。

这在 Timer 第一次调用*8playAlarm() 方法** 时可以正常工作,但一分钟后,当Timer再次调用playAlarm() 方法时,它只播放一次音乐。


     @Override
        public void onCreate() {
            super.onCreate();

            mStartTime=preferencesAlert.getInt("alert",0);  // 0 == immediately
            mInterval=preferencesInterval.getInt("interval",1);  // 1==1 minute

            mSongUri=preferencesSongUri.getString("uri","android.resource://"+getPackageName()+"/raw/celesta");

            timer = new Timer();
            TimerTask hourlyTask = new TimerTask() {
                @Override
                public void run () {
                    playAlarm();
                }
            };
            // schedule the task to run starting now and then every time interval...
            timer.schedule (hourlyTask,60000*mStartTime, 60000*mInterval);

    }

playAlarm() 方法


     private void playAlarm(){

            playerAlarm=MediaPlayer.create(getApplicationContext(),Uri.parse(mSongUri));
            playerAlarm.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                @Override
                public void onCompletion(MediaPlayer mp) {

                    repeatMax=preferencesRepeat.getInt("repeat",2);

                    if(repeatMin<=repeatMax){
                        repeatMin++;

                        if(playerAlarm!=null && !playerAlarm.isPlaying()) {
                            mp.seekTo(0);
                            mp.start();
                        }
                    }else {
                        mp.reset();
                        mp.release();
                    }
                }
            });
            playerAlarm.start();
        }

我想每分钟播放两次音乐,但它只播放一次

标签: androidandroid-mediaplayer

解决方案


第一次有效,因为您repeatMin仍然是第一个值,但是在您没有在代码中再次将其设置为 0 之后

repeatMin = first int value; // you have to reinitialize your repeatMin somewhere when the sound 
                 has been played for the second time 

推荐阅读