重复闹钟不起作用

2023-12-20

我知道这类问题被问了很多次......但请先阅读我的问题,然后再投票或标记为重复。

我已经提到了很多这样的问题this https://stackoverflow.com/questions/25948871/is-there-an-accurate-repeating-alarm-system-for-android用于管理警报,但找不到任何解决方案,所以我在这里。

在我的应用程序中,我想在每天上午 8 点触发重复警报,并根据用户指定触发其他警报。

首先,我厌倦了使用 setRepeating 重复闹钟...这是我的代码

Calendar calendar = Calendar.getInstance();
            calendar.add(Calendar.DATE, 1);
            calendar.set(Calendar.HOUR_OF_DAY, 8);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 0);
            calendar.set(Calendar.AM_PM,Calendar.AM);
            //calendar.set(Calendar.MILLISECOND, 0);


            AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
            Intent pintent = new Intent(this, AlarmReceiver.class);

            pintent.putExtra("id", 0);
            pintent.putExtra("ontime", false);

            PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
                    pintent, PendingIntent.FLAG_UPDATE_CURRENT);


            am.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pendingIntent);

实际上问题是长时间睡眠后闹钟没有响。如果它使用更改日期和时间进行测试,它会完美地触发......但它在一夜后停止触发......

所以我切换到给定链接中提到的第二个选项。我使用 setExact 设置警报,如下所示,并在每次火灾时重新安排警报。

 Calendar calendar = Calendar.getInstance();
            calendar.add(Calendar.DATE, 1);
            calendar.set(Calendar.HOUR_OF_DAY, 8);
            calendar.set(Calendar.MINUTE, 0);
            calendar.set(Calendar.SECOND, 0);
            calendar.set(Calendar.AM_PM,Calendar.AM);
            //calendar.set(Calendar.MILLISECOND, 0);


            AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
            Intent pintent = new Intent(this, AlarmReceiver.class);

            pintent.putExtra("id", 0);
            pintent.putExtra("ontime", false);

            PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
                    pintent, PendingIntent.FLAG_UPDATE_CURRENT);

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                AlarmManager.AlarmClockInfo alarmClockInfo = new AlarmManager.AlarmClockInfo(calendar.getTimeInMillis(), pendingIntent);
                am.setAlarmClock(alarmClockInfo, pendingIntent);
            } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                am.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
            } else
                am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

但钢铁我也有同样的问题。它不是每天重复的。另请考虑这只是我的默认警报的示例。根据用户指定,可以有 N 个精确且重复的警报。

有人还建议我使用服务而不是警报管理器,但我的服务可能会被终止,所以我不敢使用它。另一种解决方案是检查截止日期并每天设置所有闹钟,但我认为这不是正确的方法。是吗?

请建议我任何其他方法或帮助我改进我的代码。我非常需要这个才能工作。谢谢大家。我的测试设备是HTC One X(4.3)、Redmi Prime(6.0)和Mi4i(5.0.2)


我在设置重复警报时遇到了很多问题,但最终这段代码在我所有的测试设备上都有效,也许这会有所帮助:

    // set time
    Calendar c = Calendar.getInstance();
    c.setTimeInMillis(System.currentTimeMillis());
    c.set(Calendar.HOUR_OF_DAY, 8);
    c.set(Calendar.MINUTE, 0);
    c.set(Calendar.SECOND, 0);

    long startUpTime = c.getTimeInMillis();

    // startupTime + 24 hours if alarm is in past
    if (System.currentTimeMillis() > startUpTime) {
        startUpTime = startUpTime + 24 * 60 * 60 * 1000;
    }

    // initialize alarm
    AlarmIntent alarmIntent = new Intent(MainActivity.this, AlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, alarmIntent, 0);

    manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, startUpTime, 24 * 60 * 60 * 1000, pendingIntent);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重复闹钟不起作用 的相关文章

随机推荐

  • Android - 通过 USB 连接多个设备

    是否可以通过 USB 将两个 或更多 Android 设备连接到开发机器并同时在两个设备上调试程序 我正在尝试使用 Atrix 和 Nexus One 执行此操作 但没有成功 我找不到太多关于这方面的文档 这让我相信这是不可能的 您当然可以
  • 如何从两个不同的sql服务器获取数据?

    我有一个内联查询 其中 server1 中有一个 table1 server2 中有另一个 table2 我需要连接这两个表并获取数据 我可以这样做 例如连接到一台服务器 获取数据并连接到下一台服务器 获取数据 并加入他们 但还有没有其他更
  • 如何解决指针数组中的数据依赖性?

    如果我们有一个整数指针数组 它们都指向同一个 int 并对其进行循环 操作 它会比那些指向两个不同 int 的指针慢 100 这是一个具体的例子 int data 2 int a b a b 0 for auto i 0ul i lt 2
  • 使用 play.api.libs.json 将对象序列化为 json

    我正在尝试将一些相对简单的模型序列化为 json 例如 我想获取以下内容的 json 表示 case class User val id Long val firstName String val lastName String val e
  • 更新数据库功能在 Visual Studio 2012 的“发布 Web”对话框中不起作用

    我正在 Visual Studio 2012 下开发 ASP NET Web 窗体应用程序 我使用 Web 部署和发布 Web 对话框进行应用程序部署 我正在尝试使用更新数据库功能来部署数据库架构 我输入了一个指向远程 SQL Server
  • 在谷歌地图中获取地址和邮政编码以及经度和纬度

    在谷歌地图API中 我想提取地图中心的纬度和经度并获取那里的地址 如邮政编码 这可以得到邮政编码吗 我用这个来达到这个目的 var lat 24 448674 var lng 135 684569 var geocoder new goog
  • java字节码astore_1和astore_2有什么区别

    java字节码有什么区别astore 1 and astore 2 说明astore n 对于较小的值n 只是简写等价物astore n 任一版本都将堆栈顶部的内容存储到局部变量中n
  • 为什么实例化对象时需要在具有参数化构造函数的 POJO 文件中声明默认构造函数?

    假设我有一个带有构造函数的 POJO 类 Userpublic User int id String name 但是当我实例化 User 对象时User u new User 没有参数 Eclipse 会给出如下错误构造函数 User 未定
  • WKWebView 与本地文件

    我正在使用本地文件测试 WKWebView 该文件在模拟器中工作 但在设备中不起作用 interface EDPresentationViewController
  • 删除 couchDB 数据库

    有没有办法删除Futon中的多个数据库 我没有在一个数据库中创建多个文档 而是错误地运行了 erlang 查询并创建了大约 3000 个数据库 可以批量删除吗 谢谢 您无法使用 Futon 批量执行此操作 但是 如果您可以通过 SSH 访问
  • 使用 dplyr quos 引用 ... 中的各个变量

    阅读指南使用 dplyr 编程 http dplyr tidyverse org articles programming html 我可以参考所有 一次变量 但我如何单独使用它们呢 这是一个计算两个变量的函数 使用它成功quos and
  • 将 PG::Result 转换为 Active Record 模型

    pg ruby允许您一次性向数据库发送多个查询 这有助于最大限度地减少数据库访问次数 results conn send query QUERY1 QUERY2 QUERY3 conn block while result conn get
  • 如何使用 python 最好地将语法复杂的文本转换为语法简单的文本?

    我想编写一个 python 程序 能够将句法复杂的句子转换为 可能是几个 不太复杂的句子 我可以在下游任务中使用它们 Example 复杂的句子 今晚我要和朋友们一起踢足球 然后再去市中心旁边的剧院看电影 具有相同内容的更简单的文本 今晚我
  • PHP PDO:字符集,集名称?

    我之前在正常的 mysql 连接中有这个 mysql set charset utf8 link mysql query SET NAMES UTF8 我需要 PDO 吗 我应该在哪里拥有它 connect new PDO mysql ho
  • 如何使用十六进制字符串更改 r 的饼图中切片的颜色?

    这是我现在的饼图 library plotly library RColorBrewer P lt data frame labels c A B C D E values c 5 8 3 4 9 plot ly P labels labe
  • 隐藏

    标签而不被 Google 禁止的正确方法是什么?

    我正在开发的网站使用 CSS 中定义的图像作为主徽标 HTML 代码如下所示 h1 example com The best something ever h1 我想只显示 CSS 中定义的图像 并将信息从 H1 标签传递到搜索引擎 这样做

  • 如何生成 LLVM 位码

    我想生成位码文件 bc 因为它是用文档 http llvm org docs GettingStarted html example with clang hello c include
  • 逐字转义字符串文字

    我有以下无法编译的字符串 String formLookupPull SELECT value1 tableName columnName FROM lkpLookups WHERE table tableName and field co
  • JNDI-LDAP 分页

    我设法让分页像描述的那样工作here http docs oracle com javase tutorial jndi newstuff paged results html 问题是我需要公开一个如下所示的 API getUsers pa
  • 重复闹钟不起作用

    我知道这类问题被问了很多次 但请先阅读我的问题 然后再投票或标记为重复 我已经提到了很多这样的问题this https stackoverflow com questions 25948871 is there an accurate re