从计时器启动MediaPlayer

时间:2019-06-07 18:52:05

标签: android android-mediaplayer

我正在开发电池警报应用程序。并且我想使用 Timer 每隔一分钟使用媒体播放器播放音乐,并且还想在一分钟内重复播放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();
        }

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我猜是因为您正在onCreate中执行仅调用一次的方法。也许您可以在某些后台服务中进行设置,并每分钟调用一次