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

8
这是我的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();
在我点击按钮设置闹钟之前,我会同时获得“闹钟已设置”和“闹钟已启动”的通知。

当您在此处设置断点 alarmManager.set(AlarmManager.RTC_WAKEUP, calnow.getTimeInMillis(),pendingintent); 时,calnow.getTimeInMillis() 的值是多少? - codeMagic
TP是什么?你从哪里获取时间? - Opiatefuchs
你如何设置TP的值?你是否检查过它肯定是未来的时间?你看到的结果意味着它是过去或现在的时间。 - user1676075
@opiatefuchs 时间选择器 TP = new TimePicker(); 如果您有任何解决方案,请写下代码。实际上,我是Android的新手,请大家帮帮我。 - m_kiani
2个回答

1

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

          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

这里的问题是,TP的值似乎是当前时间。如果您展示更多的代码将会很有帮助。让我给您举个例子,设置一个延迟5秒的闹钟时间。请尝试这个方法,虽然它不太规范,但我只是想解释一下。这是您所做的:

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

要延迟五秒钟,将其更改为

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

就像我所说的一样,这只是为了显示您必须设置给alarmManager的值。它必须是以毫秒为单位的时间,您想要启动警报的时间。为此,您必须确保从您的TP中获取正确的值。因此,如果您希望我们帮助您,展示完整的代码将是一个很好的方式。


谢谢你的帮助,我刚刚上传了新代码,请检查并帮我解决问题。 - m_kiani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接