在我的应用程序中,单击开始按钮可选择从5秒到5分钟的随机时间,并将AlarmManager设置为等待,直到满足该随机时间,然后播放声音。然后,一旦播放声音,如果尚未按下停止按钮,AlarmManager将再次设置为等待新的随机时间量。我的问题是,一旦时间到了,第一次声音一次只播放15次,所以我必须清除应用程序的缓存以使其停止。
以下是按钮和AlarmManager的代码:
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main_menu_layout);
Button startButton = (Button) findViewById(R.id.startButton);
startButton.setText("START");
startButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
if (!stop)
{
setAlarm(MainMenu.this);
}//end while
}//end onClick
});//end startButton onClickListener
Button stopButton = (Button) findViewById(R.id.stopButton);
stopButton.setText("STOP");
stopButton.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
stop = true;
}//end onClick
});//end stopButton onClickListener
}//end onCreate
public static void setAlarm(Context passedContext)
{
Intent intentAlarm = new Intent(passedContext, AlarmReceiver.class);
AlarmManager alarmManager = (AlarmManager) passedContext.getSystemService(Context.ALARM_SERVICE);
Random random = new Random();
long time = random.nextInt(300000) + 5000; //random number from 5000 ms
//to 300000 ms (5 sec to 5 min)
Toast.makeText(passedContext, "random: " + time, Toast.LENGTH_SHORT).show();
alarmManager.set(AlarmManager.RTC_WAKEUP, time, PendingIntent.getBroadcast(passedContext, 1,
intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));
}//end setAlarm
以下是BroadcastReceiver的代码:
public void onReceive(Context context, Intent intent)
{
MediaPlayer player = MediaPlayer.create(context, R.raw.shots);
player.start();
if (MainMenu.stop == false)
MainMenu.setAlarm(context);
}//end onReceive
我不知道为什么它不断回到代码中来启动声音,足以在其他实例上播放它,我真的可以使用帮助。好像AlarmManager只是保持广播等等。
更新: 经过一些测试后,我注意到,只有在应用程序打开后第一次按下启动按钮时,它才会播放多个声音实例。每次按下开始按钮后,它都会按原样播放。有什么想法吗?
答案 0 :(得分:0)
添加到您的接收器:
player.setLooping(false);
答案 1 :(得分:0)
public void onReceive(Context context, Intent intent) {
Uri alert = RingtoneManager
.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
mp = MediaPlayer.create(context, alert);
mp.setVolume(10, 10);
mp.start();
mp.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
试试这个