首先,调用AlarmManager这个类是必须的,自定义个setAlarmTime方法,如下代码:

public void setAlarmTime(Context context,long timeInMillis) {
    AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
   Intent intent = new Intent();
   intent.setAction("orderDialog_Result");
   Log.e("预约定时任务", "预约定时任务");
   PendingIntent sender = PendingIntent.getBroadcast(
       context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
   am.set(AlarmManager.RTC_WAKEUP, timeInMillis,sender);
   }

pendingintent中的三个参数:

第一个是上下文,第二个参数是闹钟的id,可是设置多个闹钟,第三个是动作、意图

这个方法最重要的是am.set()方法中的三个参数,分别来介绍下:

第一个参数表示闹钟的类型,可以为:
ELAPSED_REALTIME  当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是相对时间,是从系统启动后开始计时的,包括睡眠时间,可以通过调用SystemClock.elapsedRealtime()获得。系统值是3    (0x00000003)。  
ELAPSED_REALTIME_WAKEUP 能唤醒系统,用法同ELAPSED_REALTIME,系统值是2 (0x00000002) 。  
RTC  当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是绝对时间,所用时间是UTC时间,可以通过调用 System.currentTimeMillis()获得。系统值是1 (0x00000001) 。  
RTC_WAKEUP 能唤醒系统,用法同RTC类型,系统值为 0 (0x00000000) 。
前两者使用相对时间,时间从系统启动开始算起,SystemClock.elapsedRealtime()可以获得当前的相对时间,单位为毫秒,例如:alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()+5000, sender);  
后两者使用绝对时间,时间以1970.1.1号为参考时间,System.currentTimeMillis()获取从1970.1.1号以来的时间,单位为毫秒,例如:alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5000, sender);  

其次,动作sender中 intent.setAction("orderDialog_Result");发送广播条件,需要建立一个广播接收者类,如下代码:

public class CallAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
 intent.setClass(context, AlarmAlert.class);
 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 context.startActivity(intent);
}


最后,清单文件androidmanifext.xml中注册:

<receiver
           android:name="com.clock.CallAlarmReceiver"
           android:enabled="true"
           android:exported="true" >
            <intent-filter>
               <action android:name="orderDialog_Result" />
               <action android:name="android.intent.action.BOOT_COMPLETED" />
           </intent-filter>
       </receiver>


这样一个简单的闹钟定时任务完成了,这样子有一个bug,就是手机重启后,定时任务就不会执行,am.set()方法只是保存在alarmmanager中的一个arraylist中,当手机重启后,并未保存到外存,因此数据消失,若想开机照样执行则:

首先在清单文件增加Uses permission使用权限:android.permission.RECEIVE_BOOT_COMPLETED;这个权限是重启的时候发出广播通知,然后在清单文件androidmanifext.xml中添加过滤条件:  <action android:name="android.intent.action.BOOT_COMPLETED" />
这样就行,只需要在广播接收Onreceive()方法中你自己需要的动作就行。