在特定日期和时间创建闹钟

问题描述:

我想要在某个时间和日期获取闹钟或通知。我想能够在一个数组中的特定日期有多个警报。我不知道在哪里继续关有我的按钮工作的:在特定日期和时间创建闹钟

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    //Button button = (Button)findViewById(R.id.button1); 
    // button.setOnClickListener(this); 
    final CheckBox checkBox = (CheckBox) findViewById(R.id.checkBox1); 
    final Button button = (Button) findViewById(R.id.button1); 
    button.setOnClickListener(new View.OnClickListener() 
    { 
     public void onClick(View v) { 

      if (checkBox.isChecked()) { 



      } 

     } 

预先感谢您对我的帮助。

你会想用Alarm Manager

tutorial是一个非常简单的例子,如何使用它。

另一个简单exmaple是将其分解成的

  1. 的基本步骤创建活动
  2. 创建一个BroadcastReceiver来处理该事件

编辑
要通知,请在接收到警报事件时修改广播接收器以创建通知。

Android Status Notification Documentation很好地显示了创建通知的基本步骤。

  1. 获取对NotificationManager
  2. 参考创建一个通知实例。然后,您可以定义图像,文本和时间,这也只是因为已经定义的告警事件中的当前时间cliked
  3. 电话通知时,当熄灭
  4. 定义通知的内容,如信息和意图发动

String ns = Context.NOTIFICATION_SERVICE; NotificationManager mNotificationManager =(NotificationManager)receiverContext.getSystemService(ns);

Notification notification = new Notification(R.drawable.notification_icon, "Hello", System.currentTimeMillis()); 

CharSequence contentTitle = "My notification"; 
CharSequence contentText = "Hello World!"; 
Intent notificationIntent = new Intent(receiverContext, TargetActivity.class); 
PendingIntent contentIntent = PendingIntent.getActivity(receiverContext, 0, notificationIntent, 0); 

notification.setLatestEventInfo(receiverContext, contentTitle, contentText, contentIntent); 

private static final int notificationID = 1; 

mNotificationManager.notify(notificationID, notification); 

EDIT 2
Creating notification at specified time using Alarm Manager

+0

好吧,我跟着第一个教程,但我发现其中“CTX”不能被解析为一个变量,getBroadcast不适用于参数的错误 – ScorpioBlue 2012-08-10 17:06:29

+0

CTX在该示例引用了应用程序上下文。所以改为“this”或“YourActivityName.this” – Nate 2012-08-10 17:12:31

+0

非常感谢你的男人!你知道我怎么能把它变成通知吗? – ScorpioBlue 2012-08-10 18:03:48

你可以尝试这样的:

ArrayList<Calendar> alarmTimes = getAlarmTimes(); //Make your own function which returns alarm times as an array of Calendar type 

for(int i=0; i<alarmTimes.size(); i++) 
{ 
    Intent intent = new Intent(this, YourClass.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_DATA); 
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, alarmTimes[i].getTimeInMillis(), pendingIntent); 
} 

如果你想独立处理每个报警,然后使用不同的requestCode每个报警。 另外,您可能想看看alarmManager.set()函数中使用的不同标志。根据您的应用需求修改它们。

http://developer.android.com/reference/android/app/PendingIntent.html

你将不得不作出一个AlarmReceiver类,将处理任何你想做的事情时,报警熄灭(请务必在AndroidManifest添加这个类作为接收机)。如果你想与报警一起发送额外的信息,那么你用意图额外这样的:

intent.putExtra("info1", value1); 
intent.putExtra("info2", value2); 

其中INFO1是额外数据的名称,数值1,您发送的值。

希望这会有所帮助!

编辑:

ArrayList<Calendar> alarmTimes = new ArrayList<Calendar>(); 

Calendar calendar = Calendar.getInstance(); 
calendar.set(CALENDAR.MONTH, 7); 
calendar.set(CALENDAR.DAY_OF_MONTH, 17); 
calendar.set(CALENDAR.HOUR_OF_DAY, 13); 
calendar.set(CALENDAR.MINUTE, 0); 

alarmTimes.add(calendar); 

//Repeat the above code for all alarm times and then return array object 
return alarmTimes; 
+0

谢谢你的帮助!在8月17日下午1点这样的日期,什么样的例子可以填补阵列? – ScorpioBlue 2012-08-10 18:06:46

+0

查看我编辑的答案! – 2012-08-10 18:34:56

Calendar cal = Calendar.getInstance(); //retrieves a calendar object w/ current time 
     cal.add(cal.MINUTE, 1); //adds 1 minute to current time 

    Intent alarmIntent = new Intent(this, CustomAlarmReceiver.class); 

    /* creates a new PendingIntent using the static variable eventID. 
    * using eventID allows you to create multiple events with the same code 
    * without a unique id the intent would just be updated with new extras each time its created 
    */ 
    PendingIntent pendingAlarm = PendingIntent.getBroadcast(this, eventID, alarmIntent, 
     PendingIntent.FLAG_UPDATE_CURRENT); 
    eventID+=1; 

    /* get the Alarm service and set the alarm with the time to go off and what to do when the 
    * alarm is received */ 
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
    am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingAlarm); 
    Intent intent1=new Intent(getApplicationContext(),ListActivity.class); 
    startActivity(intent1); 
    intent1.putExtra("date", date); 
    intent1.putExtra("task", message); 
       } 
+0

如果我使用上面的代码,它的工作原理......但实际上,我从另一个活动获取字符串格式的日期:Intent intent = getIntent(); String date = intent.getStringExtra(“name”);这个你能帮我吗... – user2980181 2013-11-19 18:29:53