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

编程入门 行业动态 更新时间:2024-10-25 02:23:32
本文介绍了AlarmManager setInexactRepeating,setWindow,setRepeating方法在工作日内从循环内调用时不会触发警报的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

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

Requirement :- I need to fire alarm on selected days of a week and a date from which alarms would start(for example I want to fire alarm on Friday and Saturday of every week starting from May 26, 2017 at 6:45 PM)

问题: - BroadcastReceiver的 onReceive()从循环中调用方法。

Problem:- BroadcastReceiver's onReceive() method does not executes when AlarmManager setInexactRepeating, setWindow or setRepeating methods are called from within a loop.

此任务使用的代码如下所述: - AndroidManifest.xml

Code used for this task is mentioned below:- AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="schemas.android/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

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

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()); } } }

styles.xml

styles.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>

strings.xml

strings.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>

更多推荐

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

本文发布于:2023-11-27 01:37:25,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1636044.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:警报   工作日内   方法   setInexactRepeating   AlarmManager

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!