Android 如何防止过去的警报立即消失
我是Android开发的初学者 我正在使用时间选择器小部件和alarmmanager服务设置一次报警。 但是如果用户设置的时间超过了当天的时间。 警报立即被触发。。。 请帮助我如何防止ie警报在时间过去后第二天触发 就像系统警报应用程序一样 是否有其他方法而不是报警管理器来实现相同的结果 这是我的主要活动//Android 如何防止过去的警报立即消失,android,alarmmanager,Android,Alarmmanager,我是Android开发的初学者 我正在使用时间选择器小部件和alarmmanager服务设置一次报警。 但是如果用户设置的时间超过了当天的时间。 警报立即被触发。。。 请帮助我如何防止ie警报在时间过去后第二天触发 就像系统警报应用程序一样 是否有其他方法而不是报警管理器来实现相同的结果 这是我的主要活动// 1 package com.example.friends.myalarm; 2 3 import android.annotation.SuppressLint;
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”相加,即以毫秒为单位的一天)。希望这有帮助。你能发布你的代码吗?这将更容易看到我们可以如何帮助。我已经添加了我的主要活动,请立即检查可能的副本