如何防止过去的警报立即发生

时间:2016-06-22 14:26:59

标签: android alarmmanager

我是Android开发的初学者

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

是否有其他方法而不是Alarm Manager来实现相同的结果。?

这是我的主要活动//

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

..提前致谢

1 个答案:

答案 0 :(得分:0)

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