【发布时间】:2019-10-21 18:01:12
【问题描述】:
很多人在我面前问过同样的问题,但没有一个人回答我的问题。 我使用 AlarmManager 和 BroadcastReciever 创建了一个警报应用程序。 alarmManager.cancel() 无法正常工作,并且警报响起,直到应用程序被终止。
我使用相同的 Intent 和参数来设置和取消警报。 以下是设置闹钟的代码:
public void startAlarm() {
alarmManager= (AlarmManager) getSystemService(Context.ALARM_SERVICE);
intent=new Intent(this, AlarmReceiver.class);
pendingIntent=PendingIntent.getBroadcast(getApplicationContext(),0,intent,0);
alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);
}
停止报警:
public void stopAlarm(){
alarmManager= (AlarmManager) getSystemService(Context.ALARM_SERVICE);
intent=new Intent(this, AlarmReceiver.class);
pendingIntent=PendingIntent.getBroadcast(getApplicationContext(),0,intent,0);
alarmManager.cancel(pendingIntent);
}
BroadcastReciever 类:
public class AlarmReceiver extends BroadcastReceiver {
MediaPlayer mediaPlayer;
@Override
public void onReceive(Context context, Intent intent) {
mediaPlayer=MediaPlayer.create(context, Settings.System.DEFAULT_ALARM_ALERT_URI);
mediaPlayer.start();
}
}
注意:如果闹钟在响铃前停止,则代码可以正常工作。 然而,一旦警报开始响起,它就无法停止,直到应用终止。
【问题讨论】:
-
你可以添加代码,你在哪里调用 startAlarm 和 stopAlarm
-
btnSet.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startAlarm(); } });
-
btnOff.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { stopAlarm(); } })
-
@amit-tiwary 如果警报在响铃前停止,则代码工作正常。但是在响铃时无法停止闹钟
标签: android broadcastreceiver alarmmanager