【问题标题】:Stopping an Alarm from a different Activity停止来自不同活动的警报
【发布时间】:2018-12-22 17:31:49
【问题描述】:

好的,事情是这样的; DeviceListActivity 启动警报。然后,AlarmReceiver 创建一个名为 AlarmActivity 的活动来完成一些工作并停止警报并自行终止。但我无法阻止警报。我的代码如下。

设备列表活动:

public void startAlarm(View view) {
    Calendar calNow = Calendar.getInstance();
    calNow.set(Calendar.SECOND, calNow.get(Calendar.SECOND) + 1);
    Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, calNow.getTimeInMillis(), pendingIntent);
}

报警接收器:

public void onReceive(Context context, Intent intent) {
    Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
    if (alarmUri == null) {
        alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    }
    Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri);
    ringtone.play();
    Intent alarmActivity = new Intent();
    alarmActivity.setClassName(context.getPackageName(),AlarmActivity.class.getName());
    alarmActivity.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(alarmActivity);
}

报警活动:

public void stopAlarm(View view) {
    Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarmManager.cancel(pendingIntent);
    finish();
}

【问题讨论】:

  • 在您的代码中没有发现任何问题。尝试将“getBaseContext()”替换为“this”
  • 感谢您的回答。我将所有“getBaseContext()”调用更改为“this”,但警报仍在继续。
  • 嘿.. 我明白了.. 也取消了未决的意图。 stackoverflow.com/a/30895383/1263362
  • 我也很兴奋,但没有:(
  • 你怎么知道闹钟没有取消?

标签: android android-intent android-activity alarmmanager android-pendingintent


【解决方案1】:

在警报活动中,尝试以下代码:

public void stopAlarm(View view) {
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 1, intent, 
PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
// add this if condition to check and cancel the alarm if AlarmManager is not null
if (alarmManager!= null) {
alarmManager.cancel(pendingIntent);
    finish();
}

【讨论】:

  • 感谢您的回答。我认为,如果 alarmManager 为空,则会引发 NullPointerException。在我的情况下没有抛出异常。我试过你的代码,但警报没有停止。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-06
  • 1970-01-01
  • 2019-12-27
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多