Android 报警赢得';在不关闭应用程序的情况下,不要停止响铃

Android 报警赢得';在不关闭应用程序的情况下,不要停止响铃,android,broadcastreceiver,alarmmanager,alarm,Android,Broadcastreceiver,Alarmmanager,Alarm,我正试图在我正在使用的应用程序中添加一个警报,但出于某些愚蠢的原因,一旦警报响起,我就无法在不关闭应用程序的情况下关闭警报 警报由切换按钮激活。如果它打开,警报会在预定的时间响,当它关闭时,它不会…或者至少,它不应该响 以下是ToggleButton的OnClick代码: @OnClick(R.id.alarmToggle2) protected void onAlarmToggleClicked(){ if(alarmToggle.isChecked()){ alarm

我正试图在我正在使用的应用程序中添加一个警报,但出于某些愚蠢的原因,一旦警报响起,我就无法在不关闭应用程序的情况下关闭警报

警报由切换按钮激活。如果它打开,警报会在预定的时间响,当它关闭时,它不会…或者至少,它不应该响

以下是ToggleButton的OnClick代码:

@OnClick(R.id.alarmToggle2)
protected void onAlarmToggleClicked(){
    if(alarmToggle.isChecked()){
        alarmTimeText.setTextColor(Color.GREEN);
        alarmTimeText.setVisibility(View.VISIBLE);
        //Switch on the alarm
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, alarmHour);
        calendar.set(Calendar.MINUTE, alarmMinute);

        //It's now time to set off the alarm
        Log.d(TAG, "ALARM");
        alarmReceiverIntent = new Intent(RemindersActivity.instance(),
                AlarmReceiver.class);
        broadcastIntent = PendingIntent.getBroadcast(getContext(), alarmId,
                alarmReceiverIntent, 0);
        //RTC means that the alarm won't be used if the device is asleep, RTC_WAKEUP means
        //that it will.
        alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), broadcastIntent);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                AlarmManager.INTERVAL_DAY, broadcastIntent);
    } else {
        Log.d(TAG, "Cancel alarm");
        alarmTimeText.setVisibility(View.INVISIBLE);
        alarmManager.cancel(broadcastIntent);
        alarmText.setText("");
    }
}
下面是AlarmReceiver类的onReceive()方法的代码:


后来我想出了一个解决方案:铃声现在是AlarmReceiver的一个静态变量,这就是我如何停止闹钟铃声的方法:

if(!alarmToggle.isChecked()) {
    //Stop the alarm from ringing
    if(AlarmReceiver.ringtone.isPlaying())
        AlarmReceiver.ringtone.stop();
    alarmTimeText.setVisibility(View.INVISIBLE);
    alarmManager.cancel(broadcastIntent);
    alarmText.setText("");
}

后来我想出了一个解决方案:铃声现在是AlarmReceiver的一个静态变量,这就是我如何停止闹钟铃声的方法:

if(!alarmToggle.isChecked()) {
    //Stop the alarm from ringing
    if(AlarmReceiver.ringtone.isPlaying())
        AlarmReceiver.ringtone.stop();
    alarmTimeText.setVisibility(View.INVISIBLE);
    alarmManager.cancel(broadcastIntent);
    alarmText.setText("");
}