Android AlarmManager加入与取消闹钟提醒, Notification不显示的问题

Android Notification通知无法显示问题 /如果这里用IMPORTANCE_NOENE就需要在系统的设置里面开启渠道,通知才能正常弹出。然而到这里发现还是无法显示通知,折腾了半天最后发现是要在设置-通知-应用通知中找到对应app,并开启通知显示,这样就ok了。//只在Android O之上需要渠道,这里的第一个参数要和下面的channelId一样。 阅读详情

关于日程提醒,用Android系统的AlarmManager,将提醒时间加入系统闹钟并同广播关联,在闹钟到点提醒时,触发广播,然后弹出通知栏通知日程,以下为设置闹钟的代码

 private void addRemind(){
        //得到日历实例,主要是为了下面的获取时间
        Calendar mCalendar1 = Calendar.getInstance();
        mCalendar1.setTimeInMillis(System.currentTimeMillis());

        //获取当前毫秒值
        long systemTime = System.currentTimeMillis();

        //是设置日历的时间,主要是让日历的年月日和当前同步
        mCalendar1.setTimeInMillis(System.currentTimeMillis());
        // 这里时区需要设置一下,不然可能个别手机会有8个小时的时间差
        mCalendar1.setTimeZone(TimeZone.getTimeZone("GMT+8"));
        //设置在几点提醒  设置的为13点
        mCalendar1.set(Calendar.HOUR_OF_DAY, 15);
        //设置在几分提醒  设置的为25分
        mCalendar1.set(Calendar.MINUTE, 21);
        //下面这两个看字面意思也知道
        mCalendar1.set(Calendar.SECOND, 0);
        mCalendar1.set(Calendar.MILLISECOND, 0);


        /**
         * 若感觉上面的设置过于繁琐,则可如此设置
         * mCalendar1.setTimeInMillis(System.currentTimeMillis()+60*1000);
         * 表示于当前时间1分钟后提醒
         */

        Log.i("MainActivity","提醒时间1-->"+Utils.getCustonFormatTime(mCalendar1.getTimeInMillis(),"yyyy/MM/dd/HH/mm"));
        //上面设置的就是15点21分0秒的时间点

        //获取上面设置的15点21分0秒的时间点
        long selectTime = mCalendar1.getTimeInMillis();

        // 如果当前时间大于设置的时间,那么就从第二天的设定时间开始
        if(systemTime > selectTime) {
            mCalendar1.add(Calendar.DAY_OF_MONTH, 1);
        }

        //AlarmReceiver.class为广播接受者
        Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
        PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
        //得到AlarmManager实例
        AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);

        //**********注意!!下面的两个根据实际需求任选其一即可*********

        /**
         * 单次提醒
         * mCalendar.getTimeInMillis() 上面设置的15点21分0秒的时间点
         */
        am.set(AlarmManager.RTC_WAKEUP, mCalendar1.getTimeInMillis(), pi);

        /**
         * 重复提醒
         * 第一个参数是警报类型;下面有介绍
         * 第二个参数网上说法不一,很多都是说的是延迟多少毫秒执行这个闹钟
         * 第三个参数是重复周期,也就是下次提醒的间隔 毫秒值 我这里是一天后提醒
         */
        am.setRepeating(AlarmManager.RTC_WAKEUP, mCalendar1.getTimeInMillis(), (1000 * 60 * 60 * 24), pi);
    }
开发时可能需要向广播传递数据,这时需要更改PendingIntent的参数,如下:
 Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
            intent.putExtra("name","向广播的传值");
            //sendBroadcast(intent);
            PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

第二个参数为requestCode,标识不同的闹钟服务,若需要添加多个闹铃,则该值需要该不同,负责会覆盖原来的值,其中若使用sendBroadcast(intent),则会在代码执行时,立即


向广播发送数据,而不会等到提醒时间点发送;若每一次打开app时,addRemind()都执行,则无论提醒时间是否已经过时(<当前时间),都会提醒,因此需要再加判断,若需要添加
多个闹钟,代码如下(添加了两个闹钟):
for (int i=0;i<2;i++){
            Calendar calendar=Calendar.getInstance();
            calendar.setTimeInMillis(System.currentTimeMillis());
            //获取当前毫秒值
            long systemTime = System.currentTimeMillis();

            //是设置日历的时间,主要是让日历的年月日和当前同步
            calendar.setTimeInMillis(System.currentTimeMillis());
            // 这里时区需要设置一下,不然可能个别手机会有8个小时的时间差
            calendar.setTimeZone(TimeZone.getTimeZone("GMT+8"));
            //设置在几点提醒  设置的为15点
            calendar.set(Calendar.HOUR_OF_DAY, 15);
            //设置在几分提醒  设置的为50分
            calendar.set(Calendar.MINUTE, 50);
            calendar.set(Calendar.SECOND, 40);
            calendar.set(Calendar.MILLISECOND, 0);

            Log.i("MainActivity","提醒时间-->"+Utils.getCustonFormatTime(calendar.getTimeInMillis(),"yyyy/MM/dd/HH/mm"));

            Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
            intent.putExtra("name","向广播的传值"+i);
            //sendBroadcast(intent);
            PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, i, intent, PendingIntent.FLAG_UPDATE_CURRENT);

           // sendBroadcast(intent);

            AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);

            am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pi);
            //am.cancel(pi);
        }

取消闹钟的代码:
  /**
     * 关闭提醒
     */
    private void stopRemind(){

        Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
        PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 0,
                intent, 0);
        AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
        //取消警报
        am.cancel(pi);
        Toast.makeText(this, "关闭了提醒", Toast.LENGTH_SHORT).show();

    }

其中PendingIntent的参数需要相同

以下为广播的代码:
public class AlarmReceiver extends BroadcastReceiver{
    @Override  
    public void onReceive(Context context, Intent intent) {  
        Toast.makeText(context, "闹钟响了", Toast.LENGTH_SHORT).show();  
        Log.i("AlarmReceiver","闹钟响了");  
        Bundle bundle=intent.getExtras();  
        Log.i("AlarmReceiver","接收传值"+bundle.getString("name"));  
  
  
        //从系统服务中获得通知管理器  
        Intent it=new Intent(context,MainActivity.class);  
        PendingIntent pi=PendingIntent.getActivity(context,0,it, PendingIntent.FLAG_CANCEL_CURRENT);  


	Resources res=context.getResources();
        Bitmap bmp= BitmapFactory.decodeResource(res,R.mipmap.icon);


        NotificationManager manager_notifica=(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);  
        //定义notification  
        NotificationCompat.Builder builder = new NotificationCompat.Builder(context);  
        builder.setContentTitle("日程通知")  
                .setSmallIcon(R.mipmap.ic_launcher)
		.setLargeIcon(bmp)  
                .setContentText("这是通知的内容")  
                .setTicker("日程通知")  
                // 单机 面板自动取消通知  
                .setAutoCancel(true)  
                .setDefaults(Notification.DEFAULT_SOUND);// 设置通知响应方式  
               // .setContentIntent(pi);  
  
        manager_notifica.notify(1, builder.build());// 通过管理器发送通知(通知的id,Notification对象)  
    }    
}

若不通过bundle接收值,则会获得空值,另外还有一点需要注意,在定义通知栏时,如果没有设置小图标(setSmallIcon(R.mipmap.ic_launcher)),通知栏只会出现声音提示,

不会弹出提示框(设置大图标亦无效),若更改图标,会发现弹出的测提示框图标未更改,重新安装也不行(使用魅族note3手机如此,不知其他有没有这样的情况),后经查询
app保留原来的图标,导致新的图标无法使用,这时更换手机主题设置即可出现新设置的图标。
仍需要在清单文件中,注册广播服务:
 <receiver android:name=".AlarmReceiver"
            android:process=":remote"></receiver>
以上整个闹钟添加与取消就可以了,源代码也已经上传,可以到资源页面下载







        
Android闹钟 AlarmManager的使用 对于程序员来说,要学习的知识内容、技术有太多太多,要想不被环境淘汰就只有不断提升自己,从来都是我们去适应环境,而不是环境来适应我们!最后,我再重复一次,如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。 阅读详情

相关推荐

Android实现闹钟,通过AlarmManager+BroadcastReceiver(广播)

以下是我利用AlarmManager+BroadcastReceiver实现闹钟的功能,以及通过广播来实现通知,这里我的闹铃是存放在内存raw中,并不需要在清单文件中获取权限 activity_main.xml<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/

qq_34078119的博客 7133

关于Notification不显示问题,及Android 8.0版本以上的通知Notification 配置

通知不显示问题 如果在Notification配置没有问题的情况下,通知仍然没有显示,原因可能是因为android版本问题; if (mContext.getApplicationInfo().targetSdkVersion < Build.VERSION_CODES.N && (useExistingRemoteView())) ...

API搬运工 1241

避坑指南:海康MV_CC_SetIntValue接口的7个典型报错解决方案

本文深度解析海康工业相机SDK中MV_CC_SetIntValue接口的典型报错,提供7个实战解决方案。针对MV_E_CALLORDER、MV_E_PARAMETER等高频错误码,从设备状态、参数值域、依赖关系等核心约束入手,给出清晰的诊断流程与根治代码,帮助开发者构建健壮的参数设置模块,提升开发效率。

y2z3a4b5c的博客 1078

Android Studio Notification(状态栏通知) 不显示通知 解决

可能由多种原因引起:通知权限:确保你的应用已经获得了正确的通知权限。在Android设备上,用户需要授予应用通知权限才能显示通知。你可以在应用的设置中检查通知权限的状态。通知渠道:从Android 8.0(API级别26)开始,引入了通知渠道的概念,你需要创建并分配通知到相应的渠道才能显示通知。确保你在代码中正确创建了通知渠道,并将通知分配到相应的渠道。通知优先级:通知可能会根据其优先级而被过滤或隐藏。确保你为通知设置了适当的优先级,以确保其能够在设备上显示。

qq_69574549的博客 6884

openwrt编译及第一个安装包教程

Date: 2017.03.14 Made:SuperDeverloper Email: na1206@live.com Target: For mt7688 based board说明:本人在学习过程中走了不少弯路,希望本文档能为后来者提供便利。欢迎复制和使用本文档。本文档记录了搭建openwrt编译环境以及快速创建ipk包(openwrt上的安装程序)。本文档在实际应用中做过几次修改,以帮

SuperDevloper的博客 1万+

基于Plecs的LLC谐振变换器闭环设计:从PI参数整定到动态响应优化

本文详细介绍了在Plecs仿真环境中,如何为半桥LLC谐振变换器设计并优化闭环控制系统。从开环模型搭建与特性分析入手,重点阐述了基于频域法的PI控制器参数整定流程,并通过负载阶跃、输入电压突变等测试优化动态响应。文章还分享了从仿真模型过渡到实际硬件时的关键注意事项,帮助工程师实现稳定、高效的电源设计。

e4f5g6h的博客 624

android闹钟 失效,Android闹钟启动时间设置无效问题的解决方法

Android开发中,alarmManager在5.0以上系统,启动时间设置无效的问题做一个app,需要后台保持发送心跳包。由于锁屏后CPU休眠,导致心跳包线程被挂起,所以尝试使用alarmManager定时唤醒Service发送心跳包。以下是开启alarmManager的代码//开启轮询服务public static void startPollingService(Context contex...

weixin_39617484的博客 1408

ROS2零拷贝避坑指南:Fast DDS共享内存配置常见问题与排查方法

本文深入解析ROS2 Humble中Fast DDS的零拷贝机制,提供共享内存配置的常见问题排查方法。从环境变量设置、XML配置文件到运行时诊断工具,全面指导开发者高效实现进程间数据传输优化,避免低效拷贝问题。特别针对/dev/shm无文件生成等典型场景给出解决方案。

weixin_30379531的博客 478

Android14 MTK SystemUI中设置时间为12小时制时,状态栏和锁屏界面显示AM/PM

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考。

qq_47114658的博客 2121

OFDM调制matlab仿真详细代码

MATLAB仿真代码 % ================================================== % 作者: 肆拾伍 % 时间:11/30 2019 % 版本:V3 % =================OFDM仿真参数说明:================ % % 子载波数 carrier_count ---200 % 总符号数 symbol_count ...

肆拾伍的博客 3万+

电商行业分析爬虫:抓取行业数据,进行行业分析

电商行业数据分析对于市场研究、竞争分析和商业决策至关重要。通过爬取电商平台的数据,我们可以深入了解市场动态、消费者行为和商品销售情况。本文将介绍如何构建一个电商行业分析爬虫,抓取商品信息、销售数据和用户评价等,并进行数据分析。

u014481728的博客 1628

AlarmManager+Notification实现定时通知提醒功能

AlarmManager简介  AlarmManager实质是一个全局的定时器,是Android中常用的一种系统级别的提示服务,在指定时间或周期性启动其它组件(包括Activity,Service,BroadcastReceiver)。本文将讲解一下如何使用AlarmManager实现定时提醒功能。 闹钟配置周期闹钟Intent intent = new Intent(); intent.setA

LeiHolmes的博客 4162

[低代码 + AI] 明道云与 Dify 的三种融合实践方式详解

融合方式技术路径优点局限或注意事项UI 嵌入iframe 表单嵌入快速集成、用户体验一致无法自定义交互逻辑明道云调用 DifyAPI 请求节点工作流自动化、逻辑灵活有 timeout 限制、需优化 promptDify 调用明道云插件或 API 调用节点可查询实际业务数据、增强 AI 智能需理解明道云 API 结构、权限设置复杂明道云与 Dify 的结合为低代码平台注入了智能动力。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 1187

Android AlarmManager设置闹钟

简单来说,要在设定的时间执行具体的任务,可以用 AlarmManager 来实现。

weixin_44021334的博客 4124

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Android AlarmManager 锁屏显示闹钟

锁屏状态下点亮屏幕,并弹出闹钟提示信息,可以在锁屏界面上取消闹钟;使用广播接收闹钟定时: 下面是例子里的核心代码如下 android 设置定时闹钟(包括提醒一次和循环提醒): Intent intent = new Intent(MainActivity.this,MyAlarmBroadCast.class);           /**          * co

colorfulshark 3128

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Android中设置定时闹钟以及AlarmManager详解

AlarmManager是提供一种访问系统闹钟服务的方式,允许你去设置在将来的某个时间点去执行你的应用程序。当你的闹钟响起(时间到)时,在它上面注册的一个意图(Intent)将会被系统以广播发出,然后自动启动目标程序,如果它没有正在运行。注册的闹钟会被保留即使设备处于休眠中(如果闹钟在给定时间响起可以选择是否唤醒设备)。如果闹钟关闭或者重启,闹钟将被清除。        比如说我想在在每天的八点...

qq_28330221的博客 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

android 拦截闹钟通知,AlarmManager+Notification实现定时通知提醒功能

AlarmManager简介AlarmManager实质是一个全局的定时器,是Android中常用的一种系统级别的提示服务,在指定时间或周期性启动其它组件(包括Activity,Service,BroadcastReceiver)。本文将讲解一下如何使用AlarmManager实现定时提醒功能。闹钟配置周期闹钟Intent intent = new Intent();intent.setActio...

weixin_30562977的博客 741

Android通知固定,Android中AlarmManager+Notification实现定时通知提醒功能

定时通知在我们的日常生活中是非常实用的,不管是网站还是APP都将这个功能加入到项目中,这个功能之所以收到大家的喜爱,是因为可以在特定的时间提醒我们该做什么了,在生活中给大家带来了很大的便利,今天爱站技术频道带给大家Android中AlarmManager+Notification实现定时通知提醒功能。AlarmManager简介AlarmManager实质是一个全局的定时器,是Android中常用...

weixin_34486033的博客 738

Android 之 AlarmManager (闹钟服务)

本节带来的Android中的AlarmManager(闹钟服务),听名字我们知道可以通过它开发手机闹钟类的APP, 而在文档中的解释是:在特定的时刻为我们广播一个指定的Intent,简单说就是我们自己定一个时间, 然后当到时间时,AlarmManager会为我们广播一个我们设定好的Intent,比如时间到了,可以指向某个 Activity或者Service!要说的是,此例子只在Android 4.4以下的系统可行,5.0以上并不可行,后续如果有5.0 以上AlarmManager的解决方案,到时再补上!

leyang0910的博客 3005

Android AlarmManager 闹钟相关

如何设置闹钟 具体参考Android官网。 在上午 8:30 准时唤醒设备并触发闹钟,此后每 20 分钟触发一次: private var alarmMgr: AlarmManager? = null private lateinit var alarmIntent: PendingIntent ... alarmMgr = context.getSystemService...

1223

android alarmmanager 取消闹钟,无法取消Android Alarm Manager的警报

我正在尝试使用我的应用程序设置多个警报,并根据请求取消它们 .我已经阅读了很多关于相同的主题,并浏览了文档,但似乎它不起作用 .文档说,取消将尝试找到与我提供的意图相匹配的意图' filterEquals '('确定两个意图是否相同,以达到意图解析(过滤)的目的 . 也就是说,如果他们的行为,数据,类型,类别和类别是相同的 . 这不会比较意图中包含的任何额外数据 . ')我提供相同的操作,数据,...

weixin_33729566的博客 950

简单实现Android闹钟功能,Android通过AlarmManager类实现简单闹钟功能

Android通过AlarmManager类实现闹钟,供大家参考,具体内容如下简介闹钟是生活中最常用的功能了,很多App都可以加入该功能,提醒用户某个时刻要做的事情。在Android系统中可以通过AlarmManager类实现闹钟,AlarmManager类是专门用来设定在某个指定的时间去完成指定的事件。AlarmManager提供了访问系统警报的服务,只要在程序中设置了警报服务,AlarmMan...

weixin_39872893的博客 1211

Android通过AlarmManager类实现最简单的闹钟

Android通过AlarmManager类实现闹钟简介   闹钟是生活中最常用的功能了,很多App都可以加入该功能,提醒用户某个时刻要做的事情。在Android系统中可以通过AlarmManager类实现闹钟,AlarmManager类是专门用来设定在某个指定的时间去完成指定的事件。AlarmManager提供了访问系统警报的服务,只要在程序中设置了警报服务,AlarmManager就会通过o

清风丶徐来的博客 2708

android tv闹钟_AlarmManager实现闹钟功能【Android】

这些年,我已经逐渐学会接受,接受意外,接受变故,接受误解,接受努力却暂时得不到回报,接受这个世界的残忍,接受我们身上的那些残缺。我们无法改变这个世界,但我依然选择不妥协,我还是让自己努力去爱,去为自己心中所想不顾一切。因为只有这样,我才能感觉真实,会快乐一些。AlarmManager简介在Android中可以通过AlarmManager实现调用系统闹钟服务,从而实现闹钟功能。AlarmManage...

weixin_30465509的博客 743

Android_闹钟AlarmManager的使用

Android闹钟 AlarmManager的使用   AlarmManager介绍   AlarmManager这个类提供对系统闹钟服务的访问接口。   你可以为你的应用设定一个在未来某个时间唤醒的功能。   当闹钟响起,实际上是系统发出了为这个闹钟注册的广播,会自动开启目标应用。   注册的闹钟在设备睡眠的时候仍然会保留,可以选择性地设置是否唤醒设备,但是当

W_Mayday的博客 464
上一篇: Android 判断通知栏是否打开及前往设置页面
下一篇: Android 计算两个日期之间的天数并打印所有日期
解牛之术
博客等级 码龄11年 49粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值