java - 警报不会停止响铃 - 取消按钮不起作用
问题描述
即使我按下了 stopAlarm 按钮,我也无法阻止警报响起。谢谢你
这是我在 MainActivity java 类中的启动警报开关。
public void switchClicked (View view) {
if (((Switch) view).isChecked()) {
Log.d("MainActivity", "Alarm On");
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, alarmTimePicker.getHour());
calendar.set(Calendar.MINUTE, alarmTimePicker.getMinute());
Intent myIntent = new Intent(MainActivity.this, AlarmReceiver.class);
pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent, 0);
alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
setAlarmText("ON");
} else {
alarmManager.cancel(pendingIntent);
setAlarmText("OFF");
Log.d("MainActivity", "Alarm Off");
}
}
public void setAlarmText(String alarmText) {
alarmTextView.setText(alarmText);
}
这是我在 MainActivity java 类中的 StopAlarm 按钮。
public void stopAlarm(View view) {
setAlarmText("Alarm stopped");
Intent myIntent = new Intent(MainActivity.this, AlarmReceiver.class);
pendingIntent = PendingIntent.getService(MainActivity.this, 0, myIntent, 0);
alarmManager.cancel(pendingIntent);
}
这是 AlarmReciver java 类。
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
MainActivity inst = MainActivity.instance();
inst.setAlarmText("Alarm! Wake up! Wake up!");
Uri alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
if (alarmUri == null) {
alarmUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
}
Ringtone ringtone = RingtoneManager.getRingtone(context, alarmUri);
ringtone.play();
}
}
解决方案
stopAlarm
方法应该创建PendingIntent
覆盖PendingIntent.FLAG_UPDATE_CURRENT
以前Intent
的,你试过吗?
pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
推荐阅读
- vuejs2 - 在Vue中,v-model.trim的目的是什么
- javascript - 使用 anguler ActivatedRouter 快照参数获取 json
- python - `kubectl rollout restart 的 Python 客户端 euqivelent
- coding-style - 以编程方式访问 Roslyn 中的代码分析结果
- c# - C# - float.parse 忽略点
- python - 线程功能块 main 并非一直如此
- elasticsearch - 在 Elastic Search 6 中允许多个映射
- machine-learning - Sklearn ValueError: Expected 2D array, got 1D array instead:
- node.js - NPM 不正确的依赖解析顺序
- wordpress - 使用 WooCommerce REST API 更新时,产品不显示在新类别中