android中的定时任务。由AlarmManager对象进行管理
1.定时唤醒广播接受者
直接贴代码,在代码中说明
AlarmController.java
public class AlarmController extends Activity{
private Toast mToast;
private static final String TAG = "app";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.alarm_controller);
Button button = (Button)findViewById(R.id.one_shot);
button.setOnClickListener(oneShotListener);
button = (Button)findViewById(R.id.start_repeating);
button.setOnClickListener(startRepeatingListener);
button = (Button)findViewById(R.id.stop_repeating);
button.setOnClickListener(stopRepeatingListener);
}
private OnClickListener oneShotListener = new OnClickListener() {
@Override
public void onClick(View v) { //只进行一次定时,不重复执行
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 30); //设置30秒后执行
/*
* 根据PendingIntent.getBroadcast
* 指明定时唤醒广播接收者
* */
PendingIntent pending = PendingIntent.getBroadcast(AlarmController.this,
0, new Intent(AlarmController.this,OneShotAlarm.class), 0);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pending); //表示在指定时间后执行
if(mToast!=null){
mToast.cancel();
}
mToast.makeText(AlarmController.this, "one_shot_scheduled", Toast.LENGTH_LONG).show();
}
};
private OnClickListener startRepeatingListener = new OnClickListener() {
@Override
public void onClick(View v) { //重复执行
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
PendingIntent pend = PendingIntent.getBroadcast(AlarmController.this,
0, new Intent(AlarmController.this,RepeatingAlarm.class), 0);
long triggerAtTime = SystemClock.elapsedRealtime();
triggerAtTime +=15*1000; //表示第一次执行15秒后
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
triggerAtTime, 15*1000, pend); //表示过15秒重复唤醒广播接受者
if(mToast!=null){
mToast.cancel();
}
mToast.makeText(AlarmController.this, "repeating_scheduled", Toast.LENGTH_LONG).show();
}
};
private OnClickListener stopRepeatingListener = new OnClickListener() {
@Override
public void onClick(View v) { //取消alarm
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
PendingIntent pend = PendingIntent.getBroadcast(AlarmController.this,
0, new Intent(AlarmController.this,RepeatingAlarm.class), 0);
am.cancel(pend);
if(mToast!=null){
mToast.cancel();
}
mToast.makeText(AlarmController.this, "stop_repeating_scheduled", Toast.LENGTH_LONG).show();
}
};
}
然后可以定期执行OneShotAlarm和RepeatingAlarm中的onRecevier中的内容
2.1.定时创建service
关键代码:
//注意此方法PendingIntent.getService()
PendingIntent pend = PendingIntent.getService(this, 0,
new Intent(this,AlarmService_Service.class), 0);
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
long firstTime = SystemClock.elapsedRealtime();
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 15*1000, pend);
完整例子:
分享到:
相关推荐
android真机实测通过的AlarmClock程序
轻轻松松创建一个定时任务 Android_Alarm机制
android alarm alert android alarm alert
android alarm for beginir
com.android.alarmclock
android alarmclock 源代码
android-alarm.doc PendingInent 与 AlarmManager
Android alarm流程从上层到内核的完整分析,很完整,代码分析很全
都是src文件,希望帮助大家,我做android时钟的时候找到的,官网文件
Android OS手机,C语言编程使用alarm定时器;若手机echo mem > /sys/power/state即将进入deep! Z状态时,启动alarm定时器,当到达设定的时间点,手机暂时被唤醒(若不进行resume操作,稍等片刻,系统再次进入deep! Z...
Android AlarmClock 闹钟源码,已调试完成,可以本地运行,和系统闹钟不存在冲突,android系统版本必须为2.2 。
Android内核驱动——Alarm~~~~~~~~~
闹钟app,android程序
Alarm Button for Android Aubort Jean-Baptiste 2009 AlarmButton is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free ...
网上获取的,给需要理解android alarm机制者使用。 alarm从底层到上层都有讲解。
这是Pro Android学习系列中alarm manager部分的例子源代码。相关学习笔记见:http://blog.csdn.net/flowingflying/article/details/6212512
android上面alarm功能设置定时功能时,并不能把alarm写入到rtc芯片的alarm寄存器中,所以要实现定时开机功能,需要另外实现接口 代码中在4.4和5.1上已调试通过,通过增加jni接口直接对rtc ioctrl写入alarm操作,在...
android闹钟系统-alarm.doc android闹钟系统-alarm.doc