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, PendingIntent.FLAG_UPDATE_CURRENT);
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();
}
}
解决方案
问题出在这一行
pendingIntent = PendingIntent.getService(MainActivity.this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
您正在使用getService()
,但您应该使用getBroadcast()
。
为什么?
getService()
检索将启动服务的 PendingIntent,但由于您使用的是 a BroadcastReceiver
,因此您应该使用getBroadcast()
它检索将执行广播的 PendingIntent。
推荐阅读
- jupyter-notebook - 如何链接到保存为 Reveal.JS 的 Jupyter Notebook 中的幻灯片?
- postgresql - 将附加节点附加到 postgres 主服务器作为热备用
- c# - MessageBox 和 while 循环 C#
- ios - 在 iOS 应用程序中添加应用程序事件会产生未声明的标识符“AppEvent”
- python - 在 Keras 中,为什么测试加载了 load_model 的模型比 load_weights 慢得多?
- javascript - 用js点击复选框
- typescript - 强制字段的通用接口
- linkedin - 检索 Linkedin Video Post (ugcPost API) 的缩略图
- python - 如何修改这个斐波那契数列问题?
- url-rewrite-module - IIS URL重写删除部分路径