如何防止过去的警报立即消失

How to Prevent Past Alarms Going of Immediately

我是 Android 开发的初学者

我正在使用时间选择器小部件和 alarmmanager 服务一次设置闹钟。 但如果用户设置当天过去的时间。 警报立即被触发...... 请帮助我如何防止如果时间过去了即第二天触发警报 就像系统警报应用程序一样。

是否有另一种方法而不是警报管理器来达到相同的结果?

这是我的主要内容activity//

1    package com.example.friends.myalarm; 
2     
3    import android.annotation.SuppressLint; 
4    import android.app.PendingIntent; 
5    import android.content.Context; 
6    import android.content.Intent; 
7    import android.support.v7.app.AppCompatActivity; 
8    import android.os.Bundle; 
9    import android.app.AlarmManager; 
10   import android.text.format.Time; 
11   import android.view.View; 
12   import android.widget.Button; 
13   import android.widget.EditText; 
14   import android.widget.TextView; 
15   import android.widget.TimePicker; 
16   import android.widget.Toast; 
17    
18   import java.util.Calendar; 
19    
20    
21   public class MainActivity extends AppCompatActivity { 
22       AlarmManager al; 
23       private PendingIntent pt; 
24   Calendar c; 
25       TimePicker tp; 
26    
27       TextView tv; 
28    
29       @Override 
30       protected void onCreate(Bundle savedInstanceState) { 
31           super.onCreate(savedInstanceState); 
32           setContentView(R.layout.activity_main); 
33            tp = (TimePicker)findViewById(R.id.timePicker); 
34           Button bt; 
35    
36    
37    
38   bt = (Button)findViewById(R.id.button); 
39    
40    
41           bt.setOnClickListener(new View.OnClickListener() { 
42    
43                
44    
45               @Override 
46               public void onClick(View v) { 
47                   al = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
48                   c = Calendar.getInstance(); 
49                   c.set(Calendar.HOUR_OF_DAY, tp.getHour()); 
50                   c.set(Calendar.MINUTE, tp.getMinute()); 
51                   c.set(Calendar.SECOND, 0); 
52    
53                   if (tp.getHour() < 12) { 
54                       c.set(Calendar.AM_PM, Calendar.AM); 
55                   } else { 
56                       c.set(Calendar.AM_PM, Calendar.PM); 
57                   } 
58    
59                   Intent myt = new Intent(MainActivity.this, Myreciever.class); 
60                   PendingIntent pint = PendingIntent.getBroadcast(MainActivity.this, 0, myt, 0); 
61                   al.setExact(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pint); 
62                   String toaster = "scheduled at" + Integer.toString(tp.getHour()) + ":" + Integer.toString(tp.getMinute()); 
63                   Toast.makeText(MainActivity.this, toaster 
64                           , Toast.LENGTH_SHORT).show(); 
65    
66               } 
67           }); 
68    
69    
70    
71       } 
72   } 
73

..提前致谢

Android闹钟服务会触发每一个他的编程时间小于当前时间的闹钟(即它会立即触发迟到的闹钟)。 Calendar class returns 的方法 "getInstance" 是一个具有当前时间的日历实例。如果你只设置日历实例的小时、分钟和秒,那么它会使用当前日期,所以警报会立即触发,因为时间刚刚过去。如果您想在所选时间小于当前时间的情况下为明天设置闹钟,则需要验证所选时间是否小于当前时间并有条件地将一天添加到日历(或求和到毫秒结果“ 24*60*60*1000" 这是以毫秒为单位的一天)。希望这有帮助。