Search code examples
androidandroid-mediaplayer

Starting MediaPlayer from Timer


I am developing a Battery Alarm App. and I want to play music using media-player in every one minute using the Timer and also want to repeat music 2 times within one minute.

This works fine for the first time when Timer calls the *8playAlarm() method** but after one minute when Timer again call the playAlarm() method it plays music only once.


     @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() method


     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();
        }

I want to play music two times in every minute but it plays only once


Solution

  • the first time works because your repeatMin is still at its first value but after you did not set it at 0 again in your code

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