Android 闹钟

本文详细介绍了Android中闹钟的实现方式,包括在API19之前的set、setRepeating等方法,以及API19之后引入的setWindow和setExact方法。针对API19之后无法直接设置重复闹钟的问题,提出了通过在每次闹钟触发时重新设置下一周期闹钟的解决方案。

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

Android的闹钟使用AlarmManager实现,在API 19(Android4.4)之前主要使用下面三个方法实现一次性和重复闹钟:

  1. set(int type, long startTime, PendingIntent intent) //设置一次性闹钟
  2. setRepeating(int type, long startTime, long intervalTime, PendingIntent intent)//设置重复闹钟
  3. setInexactRepeating(int type, long startTime, long intervalTime, PendingIntent intent)//设置重复闹钟

参数解释:

  • type:闹钟类型:RTC_WAKEUP(闹钟会在设备休眠状态下唤醒设备)RTC(闹钟在设备休眠状态下不会唤醒设备,但是下次设备被唤醒的时候该闹钟会有效)ELAPSED_REALTIME_WAKEUP or ELAPSED_REALTIME,RTC和REALTIME闹钟的区别在于RTC是根据时区时间触发闹钟,可以通过修改系统时间的方式触发闹钟,而REALTIME则是根据系统开机时间的流逝时间来触发闹钟
  • startTime:触发闹钟的时间,单位ms,设置的是距离1970年1月1日的ms数
  • intervalTime:重复闹钟的时间间隔单位ms
  • intent:PendingIntent是一种特殊的intent,他需要满足一定的条件才能执
然而在API 19之后Android不允许设置重复闹钟,并且闹钟非精确传递,可以使用下面两种方法实现闹钟:

  1. setWindow(int type, long startTime, PendingIntent intent)//会出现延时
  2. setExact(int type, long startTime, PendingIntent intent)//精确
API 19之后主要的问题是:

  • 如何设置重复闹钟
重复闹钟可以通过在闹钟事件到来时候重新设置一下次闹钟的形式实现

public void onReceive(Context context, Intent intent) {
    int type = intent.getIntExtra("type", 0);
    long intervalMillis = intent.getLongExtra("intervalMillis", 0);
    if (intervalMillis != 0){
        AlarmManageUtil.setAlarmTime(context, System.currentTimeMillis() + intervalMillis, intent);
    }
    intent.setClass(context, AlarmActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.startActivity(intent);
}

  • 关机之后闹钟失效
监听系统开机事件,开机之后重新设置一下闹钟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值