Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 警报不会停止鸣响-取消按钮不工作_Java_Android_Android Intent_Alarmmanager_Alarm - Fatal编程技术网

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();

即使在按下停止报警按钮后,我仍无法停止报警。谢谢

这是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);
    }
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政策,任何故意破坏行为都将恢复原状。