Как вы повторяете звук каждые 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);
}
}
});
}
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);
}
});
}
}}
Надеюсь это поможет .
Вы можете получить случайное число от 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
, когда хотите остановиться.
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.
TimerTask
для воспроизведения мультимедиа и запланироватьTimer
со случайной задержкой.