Как вы повторяете звук каждые 6-10 секунд, имея в виду случайный интервал от 6 до 10? То есть звук проигрывает 6, затем 7, 6, 10 и т. Д.? Пока у меня есть это, которое работает так, как я хочу, воспроизводит звук «один раз» и меняет кнопку на экране. Однако, чтобы снова воспроизвести звук, я должен щелкнуть кнопку «стоп», затем щелкнуть еще раз, чтобы «перейти». Я хочу нажать, затем кнопку, и звук будет повторяться каждые 6-10 секунд, пока вы не нажмете кнопку остановки ...

public class MainActivity extends ActionBarActivity {

MediaPlayer myMediaPlayer = null;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final MediaPlayer myMediaPlayer = MediaPlayer.create(this, R.raw.whistle);
    Timer soundTimer = new Timer();

    Random r = new Random();


    //Button related to play btn
    final Button startStopButton = (Button) findViewById(R.id.startstopbutton);
    startStopButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            if (startStopButton.getText().equals("Start")) {
                //start the sound


                //change button color and text
                startStopButton.setText("Stop");
                startStopButton.setBackgroundColor(Color.RED);

                myMediaPlayer.start();



            } else  {
                //stop whistle

                //change button color and text
                startStopButton.setText("Start");
                startStopButton.setBackgroundColor(Color.GREEN);




            }


        }
    });

}
1
Alex Atwater 30 Дек 2014 в 06:08
Вы можете создать TimerTask для воспроизведения мультимедиа и запланировать Timer со случайной задержкой.
 – 
CrashOverride
30 Дек 2014 в 06:18

2 ответа

Лучший ответ

Для этого вы можете использовать MediaPlayer.OnCompletionListener, всякий раз, когда воспроизведение завершается, получайте случайное число от 6 до 10 и публикуйте runnable, чтобы снова начать воспроизведение после рассчитанного случайного времени.

Вот пример этого.

public class MainActivity extends Activity {
Button button1;
MediaPlayer mediaPlayer = null;
private final Random mRandom = new Random();
int delayMillis;
Handler handler;
Runnable runnable;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button1 = (Button) findViewById(R.id.button1);
    handler = new Handler();
    runnable = new Runnable() {

        @Override
        public void run() {
            mediaPlayer.start();

        }
    };
    button1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            toggleMediaPlayer();

        }
    });
}

private void toggleMediaPlayer(){
    if(mediaPlayer != null){
            mediaPlayer.stop();
            mediaPlayer.release();
            mediaPlayer=null;
            handler.removeCallbacks(runnable);
    }else{
        mediaPlayer = MediaPlayer.create(this, R.raw.hangouts_incoming_call);
        mediaPlayer.setOnPreparedListener(new OnPreparedListener() {

            @Override
            public void onPrepared(MediaPlayer mp) {
                mp.start();

            }
        });
        mediaPlayer.setOnCompletionListener(new OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) {
                delayMillis = 1000 * mRandom.nextInt(5) + 6;
                handler.postDelayed(runnable,delayMillis);
            }
        });

    }
}}

Надеюсь это поможет .

0
Dpk 30 Дек 2014 в 07:47
Зачем вам создавать MediaPlayer снова и снова?
 – 
Jared Rummler
30 Дек 2014 в 23:48
Да, вы можете избежать создания MediaPlayer снова и снова, просто не забывайте вызывать mediaPlayer.prepare() перед повторным запуском медиаплеера после того, как вы остановите его с помощью mediaPlayer.stop().
 – 
Dpk
31 Дек 2014 в 07:22

Вы можете получить случайное число от 6 до 10 следующим образом:

int max = 10;
int min = 6;
int randomNum = new Random().nextInt((max - min) + 1) + min;
int seconds = randomNum * 1000;

Вот пример воспроизведения звука каждые 6-10 секунд:

private final Random mRandom = new Random();

private final Handler mHandler = new Handler();

private MediaPlayer mPlayer;

private boolean mKeepPlaying = true;

private void playMySound() {
    if (mPlayer == null) {
        mPlayer = MediaPlayer.create(this, R.raw.whistle);
    }
    int delayMillis = 1000 * mRandom.nextInt(5) + 6; // random number between 6 and 10
    mHandler.postDelayed(new Runnable() {
        @Override
        public void run() {
            if (isFinishing()) {
                // Check if the Activity is finishing.
                return;
            }
            mPlayer.start();
            if (mKeepPlaying) {
                // play the sound again in 6 to 10 seconds
                playMySound();
            }
        }
    }, delayMillis);
}

Просто позвоните playMySound(); в onCreate(Bundle) и переключите mKeepPlaying, когда хотите остановиться.

1
Jared Rummler 30 Дек 2014 в 06:42