这里有新鲜出炉的精品教程,程序狗速度看过来!
Android 是一种基于 Linux 的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由 Google 公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用 "安卓" 或 "安致"。
这篇文章主要为大家详细介绍了一个简单的 Android 定时任务,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
使用 AlarmManager 来实现定时提醒,它提供了一种访问系统闹钟服务的方式。在全局中,达到设定的时间,
在它上面注册的一个 Intent 将会被广播,接着启动相应的应用程序,可以通过自定义 Receiver 来实现。
首先要在 AndroidManifest.xml 中进行注册
- <receiver android:name=".AlarmReceiver">
- <intent-filter>
- <action android:name="CLOCK" />
- </intent-filter>
- </receiver>
自定义一个闹钟接收器, getIntExtra 可用于接受发送方 putExtra 传过来的值,Intent i = new Intent("CLOCK") 其中的 "CLOCK" 是注册时使用的 seceiver 的 name。
- public class AlarmReceiver extends BroadcastReceiver {
- private int _id;
- private String str;
- @Override
- public void onReceive(Context context, Intent intent) {
- _id = intent.getIntExtra("ID", -1);
- Intent i = new Intent("CLOCK");
- i.setClass(context, NoteEditor.class);
- i.putExtra("ID", _id);
- String str = intent.getStringExtra("NOTE");
- Toast.makeText( context, str, Toast.LENGTH_SHORT).show();
- i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- context.startActivity(i);
- }
- }
时间的获取通过 DatePickerDialog 和 TimePickerDialog,需要注意的是 DatePickerDialog 的月份是从 0 开始。将获取的数据放在 Calendar 类中,其中月份的存储也是从 0 开始。
- final AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
- Calendar alarmCalendar = Calendar.getInstance();
- alarmCalendar.set(mYear, mMonth-1, mDay, mHour, mMinute,0);
- Intent i = new Intent("CLOCK");
- i.setClass(this, AlarmReceiver.class);
- i.putExtra("ID", _id);
- String note="notes";
- i.putExtra("NOTE",note);
设置一个 PendingIntent 对象作为闹钟响应的对象,发送广播。第二个参数可以为 0,但是因为做的是一次性的闹钟,如果为 0 的话,新设的闹钟会将之前设的闹钟覆盖掉。FLAG_UPDATE_CURRENT: 如果希望获取的 PendingIntent 对象与已经存在的 PendingIntent 对象相比,如果只是 Intent 附加的数据不同, 那么当前存在的 PendingIntent 对象不会被取消,而是重新加载新的 Intent 附加的数据。
PendingIntent pi = PendingIntent.getBroadcast(this, _id,i,PendingIntent.FLAG_UPDATE_CURRENT);
发送闹钟请求,设置在 alarmCalendar.getTimeInMillis() 时间启动由 pi 指定的组件。
第一个参数用来指定定时服务的类型,主要可选以下值:
AlarmManager.ELAPSED_REALTIME:睡眠状态下不可用,该状态下闹钟使用相对时间。
AlarmManager.ELAPSED_REALTIME_WAKEUP:在睡眠状态下会唤醒系统并执行提示功能,也使用相对时间。
AlarmManager.RTC:该状态睡眠状态下不可用,使用绝对时间,即当前系统时间。
AlarmManager.RTC_WAKEUP:闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟也使用绝对时间。
- am.set(AlarmManager.RTC_WAKEUP, alarmCalendar.getTimeInMillis(), pi);
来源: http://www.phperz.com/article/17/0709/336620.html