0

2 秒に 1 回、通知音を再生しようとしています。私のコードは次のとおりです。

final Handler myHandler = new Handler();
mMediaPlayer = new MediaPlayer();

final Runnable mMyRunnable = new Runnable()
{
    @Override
    public void run()
    {
        try 
        {
            mMediaPlayer.setDataSource(getBaseContext(), getAlarmUri(alarm_number));
            final AudioManager audioManager = (AudioManager) getBaseContext().getSystemService(Context.AUDIO_SERVICE);

            if (audioManager.getStreamVolume(AudioManager.STREAM_ALARM) != 0)
            {
                mMediaPlayer.setAudioStreamType(AudioManager.STREAM_ALARM);
                mMediaPlayer.prepare();
                mMediaPlayer.start();
            }
        } 
        catch (IOException e) 
        {
        }
    }
 };


    mMediaPlayer.setOnCompletionListener(new OnCompletionListener()
    {
        @Override
        public void onCompletion(MediaPlayer mp) 
        {
            myHandler.postDelayed(mMyRunnable, 2000);
        }   
    });

    myHandler.post(mMyRunnable);

mMediaPlayer.setDataSource(... コードが実行されると、通知音が 1 回再生され、理由がわからない行で IllegalStateException が発生し ます。

4

1 に答える 1

2

いいえ!Timer選択したリピート レートに対してを実行する を使用する必要がありTimerTaskます。

    Timer timer = new Timer();
    TimerTask task = new TimerTask()
    {
        @Override
        public void run()
        {
            // Do your work here
        }
    };

    timer.schedule(task, 'DELAY_FOR_EXECUTION', 'TIME_TO_WAIT');
example:
   `//timer.schedule(task, 0, 5000);`

これは、5秒ごとにすぐに実行されます

于 2012-09-21T20:30:21.620 に答える