android alarmmanager 收不到广播,android定时闹钟:Service+BroadcastReceiver+AlarmManager+NotificationManager...

在开发android的过程中,需要一个定时提醒的功能,原本以为是一个很简单的功能,但是发现网上能找到的讲解或者代码都很或多或少地缺少一部分的设置和关键代码,所以我才注册了简书账户,分享一下。

在研究的这几天,遇到了以下四个问题:

1、标题中的技术都没有接触过;

2、开发过程中android studio项目的SDK过高导致的方法报错;

3、安装APK的手机版本过高导致状态栏无法显示通知信息;

4、高版本的手机对于软件的权限管理非常严格;

下面我就以我的代码来分享一下。

软件环境:

android studio3.6.3

项目选择的SDK:android 4.1(API:16)

使用的技术:

AlarmManager:

AlarmManager:AlarmManager类是android提供的用于在未来的制定时间弹出一个警告信息,或者完成指定操作的类。实际上AlarmManage是一个全局的定时器,在AlarmManage设置警告后,android将自动开启目标应用,即使手机处于休眠状态。所以,使用AlarmManage类也可以实现关机后仍可响应的闹钟。

AlarmManage对象的常用方法(其余的方法可以另外搜索):

set(int type, long triggerAtTime, PendingIntent operation); // 执行一次闹钟

setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation); //循环闹钟

参数介绍:

type:服务类型,包含四中类型:ELAPSED_REALTIME

在指定的延时过后,发送广播,但不唤醒设备(闹钟在睡眠状态下不可用)。如果在系统休眠时闹钟触发,它将不会被传递,直到下一次设备唤醒。

ELAPSED_REALTIME_WAKEUP

在指定的延时过后,发送广播,并唤醒设备(即使关机也会执行operation所对应的组件)。

延时是要把系统启动的时间SystemClock.elapsedRealtime()算进去的,具体用法看代码。

RTC

指定当系统调用System.currentTimeMillis()方法返回的与triggerAtTime相等时启动operation所对应的设备(在指定的时刻,发送广播,但不唤醒设备)。如果在系统休眠时闹钟触发,它将不会被传递,直到下一次设备唤醒(闹钟在睡眠状态下不可用)。

RTC_WAKEUP

指定当系统调用System.currentTimeMillis()方法返回的与triggerAtTime相等时启动operation所对应的设备(在指定的时刻,发送广播,并唤醒设备)。即使系统关机也会执行operation所对应的组件。

triggerAtTime:表示闹钟执行时间。

PendingIntent operation:表示闹钟响应动作:如果是通过启动服务来实现闹钟提示的话,PendingIntent对象的获取就应该采用Pending.getService(Contextc,int i,Intentintent,int j)方法;

如果是通过广播来实现闹钟提示的话,PendingIntent对象的获取就应该采用PendingIntent.getBroadcast(Context c,inti,Intentintent,int j)方法;

如果是采用Activity的方式来实现闹钟提示的话,PendingIntent对象的获取就应该采用PendingIntent.getActivity(Contextc,inti,Intent intent,int j)方法。

如果这三种方法错用了的话,虽然不会报错,但是看不到闹钟提示效果。

interval:为闹钟间隔,以毫秒为单位。内置的几个变量如下:

INTERVAL_DAY:设置闹钟,间隔一天

INTERVAL_HALF_DAY:设置闹钟,间隔半天

INTERVAL_FIFTEEN_MINUTES:设置闹钟,间隔15分钟

INTERVAL_HALF_HOUR:设置闹钟,间隔半个小时

INTERVAL_HOUR:设置闹钟,间隔一个小时

使用步骤:

第一步:获取AlarmManage对象;AlarmManage alarm = (AlarmManage) getSystemService(Context.ALARM_SERVICE);

第二步:指定时间(判断当前时间和指定的时间之间的大小,如果当前时间 > 指定时间,则时间添加一天);long firstTime = SystemClock.elapsedRealtime(); // 开机之后到现在的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现 Android 定时通知,你需要使用 AndroidAlarmManager 类。以下是实现步骤: 1. 创建一个 PendingIntent 对象 ``` Intent intent = new Intent(context, YourNotificationReceiver.class); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); ``` 其中,YourNotificationReceiver 是接通知的广播器,你需要自己编写该类。 2. 获取 AlarmManager 对象 ``` AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); ``` 3. 设置定时任务 ``` // 设置通知时间为当前时间 + 10 秒 long triggerAtMillis = System.currentTimeMillis() + 10 * 1000; // 设置重复间隔为 60 秒 long intervalMillis = 60 * 1000; alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtMillis, intervalMillis, pendingIntent); ``` 以上代码将在当前时间的 10 秒后发送第一条通知,之后每隔 60 秒发送一条通知。 4. 在广播器中处理通知逻辑 ``` public class YourNotificationReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 处理通知逻辑 NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); NotificationCompat.Builder builder = new NotificationCompat.Builder(context, "channel_id") .setSmallIcon(R.drawable.notification_icon) .setContentTitle("Notification title") .setContentText("Notification content") .setPriority(NotificationCompat.PRIORITY_DEFAULT); // 显示通知 notificationManager.notify(1, builder.build()); } } ``` 以上代码中,我们创建了一个简单的通知,并在接广播时将通知显示出来。 以上是 Android 定时通知的实现步骤,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值