AlarmManager setInexactRepeating、setWindow、setRepeating 方法在工作日内循环调用时不会触发警报

2024-05-10

要求 :-
我需要在一周中选定的几天以及警报开始的日期发出警报(例如,我想从 2017 年 5 月 26 日开始,在每周的周五和周六下午 6:45 发出警报)

问题:-
广播接收器onReceive()AlarmManager 时方法不执行setInexactRepeating, setWindow or setRepeating方法是从循环内调用的。

用于此任务的代码如下:-
AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.hiappz.remindersample">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/MainThemeBlueAccent">
        <activity android:name=".Activities.MainActivity">
           <intent-filter>
             <action android:name="android.intent.action.MAIN" />
             <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
        </activity>

        <activity
            android:name=".Activities.ActivitySaveReminder"
            android:screenOrientation="portrait"
            android:theme="@style/MainThemeBlueAccent"
            android:windowSoftInputMode="adjustNothing" />

        <receiver android:name=".Activities.MedicineReminderAlarmReceiver"
            android:process=":remote">
            <!--<intent-filter>
                <action android:name="android.intent.action.NOTIFY"/>
            </intent-filter>-->
        </receiver>

        <receiver android:name=".Activities.AlarmBootCompletedReceiver"
            android:exported="false"
            android:enabled="true"
           android:permission="android.permission.RECEIVE_BOOT_COMPLETED">  
           <intent-filter>
             <action android:name="android.intent.action.BOOT_COMPLETED"/>
             <category android:name="android.intent.category.DEFAULT"/>
           </intent-filter>
        </receiver>

    </application>
  <uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
</manifest>

ActivitySaveReminder.java

public class ActivitySaveReminder extends AppCompatActivity{

    onCreate() {
        fireAlarmOnWeekDays();
    }

    public void fireAlarmOnWeekDays() {
        long[] weekDaysMillisecondsArr = {1495737000000l, 1495823400000l};
        long[] alarmStartMillisArr = {1495801680000l};
        Calendar calendar = Calendar.getInstance();

        for (int i = 0; i < weekDaysMillisecondsArr.length; i++) {
            calendar.setTimeInMillis(weekDaysMillisecondsArr[i]);
            Log.d(TAG, "fireAlarmOnWeekDays: -->> selected day time stamp --> "+calendar.getTime());

            for (int j = 0; j < alarmStartMillisArr.length; j++) {
                int id = new Random().nextInt();
                Intent intentRemiderAlarm = new Intent(mContext, MedicineReminderAlarmReceiver.class);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, id, intentRemiderAlarm, PendingIntent.FLAG_UPDATE_CURRENT);
                AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
                pendingIntentsList.add(pendingIntent);

                if (Build.VERSION.SDK_INT >= 19) {
                    alarmManager.setWindow(AlarmManager.RTC_WAKEUP, alarmStartMillisArr[j], AlarmManager.INTERVAL_DAY * 7, pendingIntent);
//                    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartMillisArr[j], AlarmManager.INTERVAL_DAY * 7, pendingIntent);
//                    alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, alarmStartMillisArr[j], AlarmManager.INTERVAL_DAY * 7, pendingIntent);
                } else {
                    alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, alarmStartMillisArr[j], AlarmManager.INTERVAL_DAY * 7, pendingIntent);
                }
                Log.d(TAG, "fireAlarmOnWeekDays: -->> alarm start time -->> "+alarmStartMillisArr[j] + " id -->> "+id);
            }
        }
    }
}

MedicineReminderAlarmReceiver.java

ublic class MedicineReminderAlarmReceiver extends BroadcastReceiver {
    private final String TAG = "MedicineRemindrAlrmRcvr";

    @Override
    public void onReceive(Context context, Intent intent) {
        if (BuildConfig.DEBUG) {
            Log.d(TAG, "onReceive: -->> executed");
            Log.d(TAG, "onReceive: -->> System.currentTimeMillis() -->> "+ System.currentTimeMillis());
        }
    }
}

样式.xml

<style name="MainThemeBlueAccent" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="colorPrimary">@color/status_bar_color</item>
        <item name="colorPrimaryDark">@color/status_bar_color</item>
        <item name="colorAccent">@color/blue_color</item>
        <item name="android:actionMenuTextColor">@color/text_heading_color_black</item>
        <item name="actionMenuTextColor">@color/text_heading_color_black</item>
        <item name="android:textColorSecondary">@color/text_sub_heading_color_light_black</item>
    </style>

字符串.xml

<string name="app_name">ReminderSample</string>

试试这个代码,它适用于星期五闹钟,类似地,您可以设置星期六 首先你必须注册你的闹钟接收器和闹钟时间

public static void SetAlarmForFriday(Context mContext) {
        try {

            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
            System.out.println("Date " + calendar.getTime());

            int year = calendar.get(Calendar.YEAR);
            int month = calendar.get(Calendar.MONTH) + 1;
            int day = calendar.get(Calendar.DAY_OF_MONTH);

            String DateToConvert = day + "," + month + "," + year + " 10:10 AM";
            Date date = new SimpleDateFormat("dd,MM,yyyy hh:mm a", Locale.ENGLISH).parse(DateToConvert);

            Intent intent = new Intent(mContext, AlarmReceiver.class);
            intent.setAction("setYourActionHere");
            PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext.getApplicationContext(), 234324243, intent, 0);
            AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(mContext.ALARM_SERVICE);

            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, date.getTime(), AlarmManager.INTERVAL_DAY, pendingIntent);

        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

创建接收器类

public class AlarmReceiver extends BroadcastReceiver {
    public AlarmReceiver() {
    }

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.


    }

}

在应用程序标签下的清单文件中注册您的广播接收器

<receiver
            android:name=".AlarmReceiver"
            android:enabled="true"
            android:exported="true"></receiver>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AlarmManager setInexactRepeating、setWindow、setRepeating 方法在工作日内循环调用时不会触发警报 的相关文章

  • 如何修复XSS漏洞

    我们正在使用 fortify 扫描 java 源代码 它抱怨以下错误 Method abc sends unvalidated data to a web browser on line 200 which can result in th
  • 如何在首次运行时填充大型 SQLite 数据库

    我正在开发一个基于 SQLite 数据库的字典应用程序 该数据库包含超过 300 000 行 问题在于 最终形式的数据库文件由全文索引表组成 并且重量远远超过150Mb 我通过创建无内容的 fts4 表设法将 db 文件大小降至最低 数据库
  • 直接在布局 xml 中填充微调器

    是否可以在布局 xml 中直接填充 Spinner 的选项 这一页 http developer android com guide tutorials views hello spinner html建议我应该使用 ArrayAdapte
  • Spring WebFlux:在 Spring Data MongoDB 反应存储库中的 null 值时发出异常?

    我正在尝试学习如何使用 MongoDB 反应存储库spring boot 2 0 0 M2 但我担心我没有按预期做事 这是我的方法之一 试图找到一个User通过他们的电子邮件 但如果没有 该方法应该抛出异常 Override public
  • Android 拍摄后画质低

    我有一个触发图像捕获的按钮 private void capturePicture if ActivityCompat checkSelfPermission getContext Manifest permission CAMERA Pa
  • 如果没有当前类的引用,svgLoader 无法工作

    这是我的主类 通过这个类 我通过 url 从 api 获取数据 并创建一个适配器类来维护它 但发生了意外错误 这是MainActivity java public class MainActivity extends AppCompatAc
  • 使用 TestRestTemplate 和 MockRestServiceServer 时,解析异常而不是实体列表不起作用

    我有一个简单的控制器 CODE https github com joergi tryouts blob main kotlin mockrestserver src main kotlin io joergi kotlinmockrest
  • Java - 在特定日期执行方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我需要在每年的特定日期执行一个方法 我该如何在java中执行此操作 Thanks Chris 按优先顺序排列 The Quartz htt
  • Java - 修剪字节数组中的尾随空格

    我有与此类似的字节数组 77 83 65 80 79 67 32 32 32 32 32 32 32 大致等于 M S A P O C when printed as chars 现在我想修剪尾随空白 使其看起来像 77 83 65 80
  • 使用 Arrays.copyOf 复制不同类型的数组时出现问题

    我正在尝试创建一个方法 该方法几乎将任何内容作为参数 并返回带有某些分隔符的值的串联字符串表示形式 public static String getConcatenated char delim Object names String st
  • CellTables 和 css (GWT)

    有人可以帮我设置 CellTable 行的背景吗 拜托 我整晚都在努力做这件事 但一直失败 这是 让我发疯 我尝试过调用setRowStyles 但是那个 似乎不起作用 我读到你无法更改 设置样式后 CellTable 的样式 作为默认样式
  • 无法使用 jolokia 从 Kafka 提取 JMX 数据

    我已经在 centos 7 机器上安装了 Jolokia 并尝试使用 Jolokia 代理提取 Kafka 指标 并使用 Nagios 插件 check jmx4perl 与 Icinga 监控工具集成 以下是我遵循的配置步骤 步骤1 下载
  • Spring Boot 中的外部化配置,多个应用程序在同一容器中运行

    我正在构建多个 Spring Boot 应用程序 这些应用程序将部署在同一个 servlet 容器上 但我很难让 Spring Boot 按照我想要的方式使用外部化配置文件 而不是像框架想要的那样 情况 多个 Spring Boot 应用程
  • 如何执行graph-api Facebook Android SDK来上传照片并标记人物?

    如何执行graph api Facebook Android SDK来上传照片并标记人物 在网络上 对于 Android 版 facebook sdk 有很多混淆 我的第一个方法 Bitmap img bitmap if img null
  • 旋转后,精灵和矩形位置在 Libgdx 中未对齐

    我有以下代码 其中紧密映射的精灵 矩形和多边形在 libgdx 中以相同角度旋转 旋转后矩形与精灵不对齐 虽然精灵在绘制时会旋转 但旋转后坐标和尺寸保持不变 矩形的情况并非如此 请参阅下面的代码和结果图 public void rotate
  • Java 有现成的时钟同步解决方案吗?

    我们有一个大型的高性能软件系统 它由多个交互的 Java 进程 不是 EJB 组成 每个进程可以在同一台机器上 也可以在不同的机器上 某些事件在一个进程中生成 然后以不同的方式传播到其他进程以进行进一步处理等 出于基准测试的目的 我们需要创
  • 在 RadioButton 旁边添加 EditText

    我有一个习惯DialogPreference我想在其中有一个子类RadioGroup与三个单选按钮 前两个是香草RadioButton带有标题的组件 但对于第三个我想放置一个EditText直接在它的右侧 这样当选择该按钮时我可以输入自定义
  • 注意通知持续时间

    是否可以将抬头通知的持续时间设置为无限 现在它只显示 5 秒 已经尝试过不同的事情 例如更改类别 但持续时间始终为 5 秒 这是我的代码 Notification notification notificationBuilder setCa
  • JVM 调试端口 7779 正在使用

    我正在使用 RAD 8 当我在调试模式下启动服务器时 它会显示一条错误消息 指出JVM debug port 7779 is in use 我多次遇到这个问题 因为我知道 RAD 使用了这个端口 所以我不得不停止这个过程窗口任务管理器 gt
  • Struts2 中有多种结果类型?

    我有一个使用 Tiles 的 Struts2 应用程序 如何在操作映射中获取多种结果类型 因为我需要将de输出设置为JSON数据 并且同时Tiles 我努力了

随机推荐

  • Phantom JS 50% 的时间失败

    我搜索一个文本框 然后尝试用字符串填充它 这是代码 var fname driver FindElement By Name iFirstName 50 if fname null do System Threading Thread Sl
  • python:获取上两层目录

    好吧 我不知道模块在哪里x是 但我知道我需要向上两层目录的路径 那么 有没有更优雅的方法 import os two up os path dirname os path dirname file 欢迎提供适用于 Python 2 和 3
  • 为使用 conda 安装的仅标头库设置包含路径

    最近有人建议我作为包管理器查看 conda 不幸的是 我没有成功地找到如何让我的编译器找到与 conda 安装的仅标头库 理想情况下 我希望根本不必手动指定编译器的路径 上下文是我来自 macOS 上的自制软件 它会在正确的位置创建符号链接
  • jooq 的限制和偏移量问题

    我已将 jooq 与 spring 集成 对于对数据库 MySQL 的所有类型的查询 我使用 spring 的 JDBC 模板 这里使用 jooq 库生成 sql 查询以传递给 jdbc 模板 尽管我的其余查询工作正常 直到我向查询添加限制
  • Backbone.js el 不工作

    App Views VideoView Backbone View extend initialize function bindAll this render this model this options model this rend
  • UI键盘回避和自动布局

    鉴于 iOS 6 中对自动布局的关注以及 Apple 工程师的推荐 查看 WWDC 2012 视频 我们不再直接操作视图的框架 那么如何仅使用自动布局和 NSLayoutConstraint 来避免键盘呢 Update 这看起来是一个合理的
  • 如何获得 R 帮助?

    R 包可能有哪些可用文档 例如我尝试理解sp包裹 此外help sp 还有哪些用于搜索帮助和文档的其他功能 获取有关您知道其名称的函数的帮助 Use http www inside r org r doc utils Question或者
  • ASP.NET MVC4 教程/脚手架 - 验证和显示使用几种不同的区域设置

    我正在使用 VS 2012 RC 并尝试从此处遵循 MVC4 教程 http www asp net mvc tutorials mvc 4 getting started with aspnet mvc4 accessing your m
  • Mono for Android,读取和写入 XLSX

    我正在使用 Mono for Android 开发一个应用程序 我需要读取和创建 XLSX Excel 文件的功能 我尝试过EPPlus和NPOI 并快速浏览了一下微软的Open XML SDK 发现了以下问题 EPPlus 需要 Wind
  • 我可以在 R 中并行读取 1 个大 CSV 文件吗? [复制]

    这个问题在这里已经有答案了 我有一个很大的 csv 文件 需要很长时间才能阅读 我可以使用 parallel 或相关的包在 R 中并行读取此内容吗 我尝试过使用 mclapply 但它不起作用 根据OP的评论 fread来自data tab
  • 使用 Apache POI 和 Java 创建 Excel (.xlsx) 文件后文件损坏

    我已经使用 Apache POI API 使用 Java 成功创建了 xlsx 格式的工作簿 Excel 我的代码如下 在 D 盘创建一个名为 RiponAlWasim xlsx 的文件 Workbook wb new XSSFWorkbo
  • 设置 TextBlock 以保留开头和结尾的空白?

    EDIT 下面的代码实际上按照我想要的方式工作 这个问题有点误导 请忽略它 通常当我设置Text的财产TextBlock像这样 TextBlock tb new TextBlock tb Text Hello World 文本开头和结尾的空
  • 如何使用正则表达式进行正确的输入验证?

    我想让用户只输入整数或浮点数 现在我只能输入整数 它允许输入点或逗号 无法找到正确的正则表达式来验证整数和浮点数
  • AJAX jQuery.load 与 jQuery.get

    使用 jQuery 进行 AJAX 调用时 什么时候应该使用 load url data callback 方法 什么时候应该使用 jQuery get url data callback type 方法 首先这两个功能是完全不同的 loa
  • 反序列化 DateOnly

    我有一条正在尝试反序列化的记录 public record MementoTimeEntry Guid Id Guid ActivityId string UserId string Title TimeOnly StartTime Tim
  • 列出 NXOpen 包中的所有模块/子包

    我正在尝试遵循这个帖子 https stackoverflow com a 1707786 4999991 列出 NX Open 包中的所有模块 import NXOpen import pkgutil the string package
  • 我可以查看当前登录的 Twitter 用户吗?

    他们没有通过我的网站进行 OAuth 验证 但在该浏览器上登录到 Twitter 有什么办法让我知道他们的 Twitter 用户名吗 饼干 什么 除非某些东西非常糟糕或者 Twitter 明确提供了用于此目的的 API 否则不会 至少不是通
  • 键入时将编辑文本中的每个单词大写

    我想在打字时将编辑文本中的每个单词大写 My XML
  • 如何捕获 Symfony2/Silex 中的错误和异常?

    我想在我的 Silex 应用程序中捕获错误和异常 将它们包装在始终返回给客户端的自定义 JSON 响应中 我发现了三种基本方法 app gt error Symfony Component Debug ErrorHandler regist
  • AlarmManager setInexactRepeating、setWindow、setRepeating 方法在工作日内循环调用时不会触发警报

    要求 我需要在一周中选定的几天以及警报开始的日期发出警报 例如 我想从 2017 年 5 月 26 日开始 在每周的周五和周六下午 6 45 发出警报 问题 广播接收器onReceive AlarmManager 时方法不执行setInex