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

Android 如何防止过去的警报立即消失,android,alarmmanager,Android,Alarmmanager,我是Android开发的初学者 我正在使用时间选择器小部件和alarmmanager服务设置一次报警。 但是如果用户设置的时间超过了当天的时间。 警报立即被触发。。。 请帮助我如何防止ie警报在时间过去后第二天触发 就像系统警报应用程序一样 是否有其他方法而不是报警管理器来实现相同的结果 这是我的主要活动// 1 package com.example.friends.myalarm; 2 3 import android.annotation.SuppressLint;

我是Android开发的初学者

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

是否有其他方法而不是报警管理器来实现相同的结果

这是我的主要活动//

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包com.example.friends.myalarm;
2.
3导入android.annotation.SuppressLint;
4导入android.app.pendingent;
5导入android.content.Context;
6导入android.content.Intent;
7导入android.support.v7.app.AppActivity;
8导入android.os.Bundle;
9导入android.app.AlarmManager;
10导入android.text.format.Time;
11导入android.view.view;
12导入android.widget.Button;
13导入android.widget.EditText;
14导入android.widget.TextView;
15导入android.widget.TimePicker;
16导入android.widget.Toast;
17
18导入java.util.Calendar;
19
20
21公共类MainActivity扩展了AppCompatActivity{
22.al;
23私人悬垂帐篷pt;
24日历c;
25时间选择器tp;
26
27文本视图电视;
28
29@Override
30创建时受保护的void(Bundle savedInstanceState){
31 super.onCreate(savedInstanceState);
32 setContentView(R.layout.activity_main);
33 tp=(时间选择器)findViewById(R.id.TimePicker);
34按钮bt;
35
36
37
38 bt=(按钮)findViewById(R.id.Button);
39
40
41 bt.setOnClickListener(新视图.OnClickListener(){
42
43
44
45@Override
46公共空间点击(视图五){
47 al=(AlarmManager)getSystemService(Context.ALARM\u服务);
48 c=Calendar.getInstance();
49 c.set(Calendar.HOUR,tp.getHour());
50 c.set(Calendar.MINUTE,tp.getMinute());
51摄氏度(日历秒,0);
52
53如果(tp.getHour()<12){
54 c.set(Calendar.AM\u PM,Calendar.AM);
55}其他{
56 c.设置(日历上午/下午,日历下午);
57                   } 
58
59 Intent myt=新Intent(MainActivity.this、myreceiver.class);
60 pendingent pint=pendingent.getBroadcast(MainActivity.this,0,myt,0);
61 al.setExact(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),品脱);
62 String toaster=“计划在“+Integer.toString(tp.getHour())+”:“+Integer.toString(tp.getMinute())”;
63 Toast.makeText(MainActivity.this,toaster
64,吐司。长度(短)。show();
65
66               } 
67           }); 
68
69
70
71       } 
72   } 
73

…提前感谢

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

你能发布你的代码吗?这将更容易看到我们可以如何帮助。我已经添加了我的主要活动,请立即检查可能的副本