android Alarm机制

本文介绍了Android中AlarmManager的使用,它用于实现手机的定时操作。通过AlarmManager,可以在设定的时间点触发广播或者启动服务。讲解了AlarmManager的几种模式,如ELAPSED_REALTIME、ELAPSED_REALTIME_WAKEUP等,并提供了设置一次性与周期性任务的示例代码。通过了解这些,开发者可以灵活地在Android设备上安排定时任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AlarmManager闹钟管理对象实现手机定时操作

  1. 如果要对手机进行定时的操作,可以使用handler,timertask 、Alarm机制。这里对 Alarm机制做一个讲解。
  2. 先看一段代码吧,这是通过AlarmManager机制实现定时操作10分钟后操作手机
    Intent intent=new Intent(MainActivity.this,AlarmBroadcast.class);
    //创建一个AlarmManager对象
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    //新建个PendingIntent对象,里面传入的参数分别是,activity, requestcode,intent,flag;
    PendingIntent pending = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
    //设置个时间
    long triggerTime = SystemClock.elapsedRealtime() + 10*60 * 1000;
    //10分钟后触发intent。
    am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerTime,pending);

刚开始时,以为这个broadcast一定要是静态的,其实不是的。intent可以携带action传出去,也可以直接指定要跳转的activity,这里就是直接指定的AlarmBroadcast.class这个类,没有携带action。

关于PendingIntent的相关用法可以参考链接里的文章:PendingIntent解释

3.关于AlarmManager的这几个参数:

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

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

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

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

  • AlarmManager.POWER_OFF_WAKEUP:表示闹钟在手机关机状态下也能正常进行提示功能,所以是5个状态中用的最多的状态之一,该状态下闹钟也是用绝对时间,状态值为4;不过本状态好像受SDK版本影响,某些版本并不支持;

4.另一种通过AlarmManager周期性的连续对手机进行操作

    AlarmManager mAlarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(RECODE_ACTION);
        intent.putExtra("filepath", filepath);
        PendingIntent mPending = PendingIntent.getBroadcast(
                getApplicationContext(), 0, intent,
                PendingIntent.FLAG_UPDATE_CURRENT);
        long triggerTime = SystemClock.elapsedRealtime();
        long intervalTime = 2 * 60 * 60 * 1000;
        mAlarm.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerTime,
                intervalTime, mPending);

此段代码是先发送一次广播,然后在每隔2小时发送一次广播。调用的是setRepeating()函数,传入了一个周期的时间。
可以利用这两种方法对手机进行定时操作和周期性的重复操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值