如何使用开关关闭闹钟

时间:2016-01-17 21:27:11

标签: android switch-statement alarmmanager android-calendar timepickerdialog

我有一个触发TimePickerDialog来设置闹钟的开关。我现在想要在关闭闹钟时关闭闹钟。另外,当我将其打开时,我想再次设置闹钟。

public class MainAddMedActivity extends AppCompatActivity {

    private TextView txtAlarmPrompt;
    private TimePickerDialog timePickerDialog;
    private Switch switchReminder;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_add_med);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);

        this.txtAlarmPrompt = (TextView) findViewById(R.id.txtAlarmPrompt);
        this.switchReminder = (Switch) findViewById(R.id.switchReminder);

        switchReminder.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    openTimerPickerDialog(true);
                    timePickerDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
                        @Override
                        public void onCancel(DialogInterface dialog) {
                            switchReminder.setChecked(false);
                        }
                    });
                }
            }
        });
    }

    private void openTimerPickerDialog(boolean is24HourView) {
        Calendar cal = Calendar.getInstance();

        timePickerDialog = new TimePickerDialog(
                MainAddMedActivity.this,
                onTimeSetListener,
                cal.get(Calendar.HOUR_OF_DAY),
                cal.get(Calendar.MINUTE),
                is24HourView);
        timePickerDialog.show();
    }

    TimePickerDialog.OnTimeSetListener onTimeSetListener = new TimePickerDialog.OnTimeSetListener() {
        @Override
        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
            Calendar calNow = Calendar.getInstance();
            Calendar calSet = (Calendar) calNow.clone();

            calSet.set(Calendar.HOUR_OF_DAY, hourOfDay);
            calSet.set(Calendar.MINUTE, minute);
            calSet.set(Calendar.SECOND, 0);
            calSet.set(Calendar.MILLISECOND, 0);

            if (calSet.compareTo(calNow) <= 0) {
                calSet.add(Calendar.DATE, 1);
            }
            setAlarm(calSet);
        }
    };

    private void setAlarm(Calendar targetCal) {
        txtAlarmPrompt.setText(getString(R.string.txtPromptAlarm) + " " + targetCal.getTime());
        Intent intent = new Intent(getApplicationContext(), AlarmNotificationReceiver.class);
        final PendingIntent pendingIntent = PendingIntent.getBroadcast(this, AlarmNotificationReceiver.REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        final AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);

        ***switchReminder.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked = false) {
                    alarmManager.cancel(pendingIntent);
                }
            }
        });*** //This Part is wrong does not work
    }

1 个答案:

答案 0 :(得分:0)

由于header('Content-Type: application/json');

,您的OnCheckedChangeListener无效

if-statement会在if (isChecked = false) - 语句运行之前将false分配给变量isChecked,因此if - 语句的正文将是从不运行,因为if永远不会成真。

使用isChecked会将右侧指定为左侧的新值,而=则会将2个值相互评估。

将您的==语句更改为:

if

你也可以这样做:

if (!isChecked) {
    alarmManager.cancel(pendingIntent);
}

但是,使用if (isChecked == false) { alarmManager.cancel(pendingIntent); } boolean作为{truefalse来检查if (myBoolean == true)if (myBoolean == false)还是if,这被视为不良做法{1}}直接评估booleans

要再次设置闹钟,您需要else语句if,您可以拨打alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);

所以if-else会是这样的:

if (!isChecked) {
    alarmManager.cancel(pendingIntent);
} else {
    alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent); // Remember to change the time to a new time in millis.
}