【问题标题】:Alarm manager don't stop alarm without killing the app警报管理器不会在不杀死应用程序的情况下停止警报
【发布时间】:2019-10-21 18:01:12
【问题描述】:

很多人在我面前问过同样的问题,但没有一个人回答我的问题。 我使用 AlarmManagerBroadcastReciever 创建了一个警报应用程序。 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


【解决方案1】:

尝试- alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY,pendingIntent);

【讨论】:

  • 代替 -alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY,pendingIntent);
【解决方案2】:

使用这个

  public void stopAlarm(){
   alarmManager= (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        intent=new Intent(this, AlarmReceiver.class);
        pendingIntent=PendingIntent.getBroadcast(getApplicationContext(),0,intent,PendingIntent.FLAG_UPDATE_CURRENT);

            alarmManager.cancel(pendingIntent);

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2017-03-31
    相关资源
    最近更新 更多