Java 警报不会停止鸣响-取消按钮不工作
即使在按下停止报警按钮后,我仍无法停止报警。谢谢 这是MainActivity java类中的启动报警开关Java 警报不会停止鸣响-取消按钮不工作,java,android,android-intent,alarmmanager,alarm,Java,Android,Android Intent,Alarmmanager,Alarm,即使在按下停止报警按钮后,我仍无法停止报警。谢谢 这是MainActivity java类中的启动报警开关 public void switchClicked (View view) { if (((Switch) view).isChecked()) { Log.d("MainActivity", "Alarm On"); Calendar calendar = Calendar.getInstance();
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);
}
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);
}
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();
}
}
这是我在MainActivity java类中的StopAlarm按钮
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);
}
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);
}
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();
}
}
这是AlarmReceiver 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);
}
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);
}
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();
}
}
stopalm
方法应使用pendingent.FLAG\u UPDATE\u CURRENT
创建pendingent
,以覆盖以前的意图,您尝试过吗
pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
stopalm
方法应使用pendingent.FLAG\u UPDATE\u CURRENT
创建pendingent
,以覆盖以前的意图,您尝试过吗
pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
谢谢你的帮助,但它似乎不起作用。我按下停止按钮后,闹钟仍然响个不停。你知道还有什么方法可以让这个按钮工作吗?感谢您的帮助snachmsm。您正在使用由pendingent.getBroadcast
创建的pendingent
启动报警,但您正在尝试使用pendingent.getService
取消报警。在这两个地方都应该是getBroadcast
(因为AlarmReceiver扩展了BroadcastReceiver
)好了,现在我看到这里发生了什么。。。您正在手动调用ringotne.play()代码>但从不停止它。。。您的方法stopAlarm(视图)
实际上是取消先前设置的潜在挂起报警。如果它已经启动了,那么stopalm
几乎什么也不做(除了它没有使用getService
并且没有更新标志之外,所以根本不工作)。您想要实现的是访问相同的Ringtone
实例并调用stop()
,同时我要警告您,MainActivity.instance()
模式非常糟糕且有bug,可能会导致内存泄漏和崩溃…你可以在这个线程中给我打电话,添加新的评论和新问题的链接,我会尽力帮助你。祝你好运!:)谢谢你的帮助,但它似乎不起作用。我按下停止按钮后,闹钟仍然响个不停。你知道还有什么方法可以让这个按钮工作吗?感谢您的帮助snachmsm。您正在使用由pendingent.getBroadcast
创建的pendingent
启动报警,但您正在尝试使用pendingent.getService
取消报警。在这两个地方都应该是getBroadcast
(因为AlarmReceiver扩展了BroadcastReceiver
)好了,现在我看到这里发生了什么。。。您正在手动调用ringotne.play()代码>但从不停止它。。。您的方法stopAlarm(视图)
实际上是取消先前设置的潜在挂起报警。如果它已经启动了,那么stopalm
几乎什么也不做(除了它没有使用getService
并且没有更新标志之外,所以根本不工作)。您想要实现的是访问相同的Ringtone
实例并调用stop()
,同时我要警告您,MainActivity.instance()
模式非常糟糕且有bug,可能会导致内存泄漏和崩溃…你可以在这个线程中给我打电话,添加新的评论和新问题的链接,我会尽力帮助你。祝你好运!:)请不要破坏你的帖子。通过在Stack Exchange网络上发布,您已授予SE分发该内容的不可撤销的权利(根据)。根据SE政策,任何破坏行为都将被恢复。请不要破坏您的帖子。通过在Stack Exchange网络上发布,您已授予SE分发该内容的不可撤销的权利(根据)。根据SE政策,任何故意破坏行为都将恢复原状。