Android 设置定时提醒,AlarmManager简单使用
发布日期:2021-07-30 03:26:11 浏览次数:12 分类:技术文章

本文共 2890 字,大约阅读时间需要 9 分钟。

给app设置定时提醒的功能,典型的例子有闹钟,AlarmManager是Android系统级的服务,原理相当的简单,当你设定一个时间,然后在到达时候后,系统触发一个广播,然后广播通过PendingIntent来达到最终目的。

下面一步一步来说:
首先定义一个广播RemindReceiver.java用来接收系统提醒:
RemindActivity是我们闹钟的展示界面。

public class RemindReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) { ToastUtils.showMessage(context,"收到消息"); MediaPlayer.create(context, R.raw.remind).start(); Bundle bundle = intent.getExtras(); intent = new Intent(context, RemindActivity.class); intent.putExtras(bundle); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); }

然后再AndroidManifest.xml中注册这个广播:

添加一个提醒:

public class AlarmManageService {    public static AlarmManager alarmManager;    private static String TAG = "AlarmManageService";    public static void addAlarm(Context context, int requestCode,Bundle bundle,int minute){        Intent intent = new Intent(context,RemindReceiver.class);        intent.putExtras(bundle);        PendingIntent pendingIntent = PendingIntent.getBroadcast(context,requestCode,intent,0);        Calendar calendar = Calendar.getInstance();        calendar.setTimeInMillis(System.currentTimeMillis());        calendar.add(Calendar.SECOND,60*minute);        //注册新提醒        alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);        alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);    }}

这里Bundle 是用来携带信息的,跟intent携带信息一样。

这里使用Calendar 来设定一个将来的时间,为minute分钟之后;

calendar.setTimeInMillis(System.currentTimeMillis()); calendar.add(Calendar.SECOND,60*minute);

AlarmManager有三个常用的方法:

(1):设置一次性闹钟:
AlarmManager.set(int type,long startTime,PendingIntent pendingIntent );
(2):该方法用于设置重复闹钟:
setRepeating(int type,long startTime,long intervalTime,PendingIntent pendingIntent );
(3):该方法也用于设置重复闹钟:
setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pendingIntent );

参数:int type: 闹钟的类型,常用的有5个值

分别是:
a: AlarmManager.ELAPSED_REALTIME 表示闹钟在手机睡眠状态下不可用,该状态下闹钟使用相对时间(相对于系统启动开始),状态值为3;

b:AlarmManager.ELAPSED_REALTIME_WAKEUP 表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟也使用相对时间,状态值为2;

c:AlarmManager.RTC 表示闹钟在睡眠状态下不可用,该状态下闹钟使用绝对时间,即当前系统时间,状态值为1;

d:AlarmManager.RTC_WAKEUP 表示闹钟在睡眠状态下会唤醒系统并执行提示功能,该状态下闹钟使用绝对时间,状态值为0;

e:AlarmManager.POWER_OFF_WAKEUP 表示闹钟在手机关机状态下也能正常进行提示功能,所以是5个状态中用的最多的状态之一,该状态下闹钟也是用绝对时间,状态值为4。

参数:long startTime 闹钟开始时间,以毫秒为单位;

参数:PendingIntent pendingIntent:设定闹钟的动作,可以是Activity,BroadcastReceiver 等。

参数:long intervalTime:在第二个方法中指,两次闹钟的间隔时间,相等间隔;在第三个方法中也指两次闹钟间隔时间,不相等时间;

现在就可以设置闹钟了:

alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);        alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);

最后就是使用了:

这里bundle携带信息,比如提示文字等等......,用于在RemindActivity界面展示AlarmManageService.addAlarm(context,0,bundle,Integer.parseInt(result.getTxjg()));

闹钟的基本使用方法大致就是这样了。

转载地址:https://blog.csdn.net/u010886975/article/details/54966836 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android 判断触摸点是否在某个view内部,解决子childView与parentView的touch事件冲突
下一篇:Android TestView使用Html设置字体

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月14日 19时51分44秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章