我正在尝试使用闹钟管理器在特定时间设置闹钟,但闹钟立即被启动了?

19 浏览
0 Comments

我正在尝试使用闹钟管理器在特定时间设置闹钟,但闹钟立即被启动了?

这是我的onclick()函数,它将设置目标闹钟。

      SA=(Button)findViewById(R.id.button1);

SA.setOnClickListener(new OnClickListener() {

@SuppressWarnings(\"deprecation\")

@Override

public void onClick(View v) {

showDialog(id);

}

});

}

@Override

protected Dialog onCreateDialog(int id1) {

switch (id1) {

case id:

//将时间选择器设置为当前时间

return new TimePickerDialog(this,

timePickerListener, hour, min,false);

}

return null;

}

private TimePickerDialog.OnTimeSetListener timePickerListener =

new TimePickerDialog.OnTimeSetListener() {

public void onTimeSet(TimePicker view, int selectedHour,

int selectedMinute) {

Calendar calnow=Calendar.getInstance();

calnow.setTimeInMillis(System.currentTimeMillis());

calnow.set(Calendar.HOUR_OF_DAY,selectedHour);

calnow.set(Calendar.MINUTE,selectedMinute);

calnow.set(Calendar.SECOND, 0);

Intent intent=new Intent(getBaseContext(),alarm.class);

PendingIntent pendingintent= PendingIntent.getBroadcast(getBaseContext(),0, intent, 0);

AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);

alarmManager.set(AlarmManager.RTC_WAKEUP, calnow.getTimeInMillis(),pendingintent);

Toast.makeText(getBaseContext(), \"闹钟已设置\", Toast.LENGTH_SHORT).show();

}

};

    public void onReceive(Context arg0, Intent arg1) {

AlarmManager mgr = (AlarmManager)arg0.getSystemService(Context.ALARM_SERVICE);

Toast.makeText(arg0,\"闹钟已启动.....\", Toast.LENGTH_LONG).show();

问题在于,我在点击按钮设置闹钟之前就会收到“闹钟已设置”和“闹钟已启动”的两个提示。

admin 更改状态以发布 2023年5月22日
0
0 Comments

这里的问题是,TP的值似乎是当前时间。如果您能展示更多代码,那会很有帮助。让我举个例子,用延迟5秒的方式设置闹钟时间。请您尝试以下这种做法,这只是粗略的解释。您所做的是:

       calnow.set(Calendar.HOUR_OF_DAY,TP.getCurrentHour());
            calnow.set(Calendar.MINUTE,TP.getCurrentMinute());
          alarmManager.set(AlarmManager.RTC_WAKEUP,   calnow.getTimeInMillis(),pendingintent);

要延迟5秒,把它改为

    alarmManager.set(AlarmManager.RTC_WAKEUP,   calnow.getTimeInMillis()+5000,pendingintent);

就像我说的一样,这只是为了展示您需要设置到闹钟管理器中的值。它必须是以毫秒为单位的时间,您想启动闹钟的时间。因此,您必须确保从您的TP中获取正确的值。因此,如果您想让我们帮助您,展示完整的代码将是一个很好的方式。

0
0 Comments

你的错误就在这里。所以要像这样做

          Calendar calnow=Calendar.getInstance()
            calnow.set(Calendar.HOUR_OF_DAY,selectedHour);
            calnow.set(Calendar.MINUTE,selectedMinute);
            calnow.set(Calendar.SECOND, 0);
            if (calnow.getTimeInMillis()< System.currentTimeMillis()) {
            calnow.set(Calendar.DAY_OF_YEAR, 1)
            }

0