- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
要求:-
我需要在一周中选定的几天触发警报以及警报开始的日期(例如,我想在每周的周五和周六从 2017 年 5 月 26 日下午 6:45 开始触发警报)
问题:-
当从循环内调用 AlarmManager setInexactRepeating
、setWindow
或 setRepeating
方法时,BroadcastReceiver 的 onReceive()
方法不执行.
用于此任务的代码如下所述:-
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.
}
}
在 Application 标签下的 list 文件中注册您的广播接收器
<receiver
android:name=".AlarmReceiver"
android:enabled="true"
android:exported="true"></receiver>
关于java - AlarmManager setInexactRepeating、setWindow、setRepeating 方法在一周内从循环内调用时不会触发警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44204387/
我正在使用 AlarmManager 每天在通过时间选择器选择的特定时间触发通知。通知在同一天正确触发,但不是每天都正确重复!!! 这是使用setRepeating()设置通知的方法: public
我的程序旨在创建一个重复警报,触发一个广播接收器,进而发出通知。使用用户输入的时间间隔重复警报。 例如,如果我想将闹钟设置为每 10 秒运行一次,我该怎么做? am.setRepeating(Ala
我试图通过 AlarmManager 定期调用一个线程。问题是,在给定的时间段之后,OnReceive() 被调用了两次(为什么?),然后再也没有调用过。我在这里做错了什么? 我在 API 级别 23
我有像上午 9:00、下午 1:00、晚上 7:00 这样的时间,我设置了 3 个待处理的 Intent ,这些 Intent 每天使用 setRepeating() 方法递归触发。 (这里我将所有这
我在尝试设置每日通知时遇到问题。 我使用 AlarmManager 设置每天下午 6:00 的闹钟 Intent myIntent = new Intent(this, AlarmReceiver.c
这是我的代码: cal.set(Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH, hourOfDay, minute,Calendar.SEC
我已经实现了 AlarmManager 来每天唤醒手机一次以执行更新任务、更新小部件并在适用时发送通知。 我正在使用 setRepeating 和 ELAPSED_REALTIME_WAKEUP第一次
所以基本上我有这个代码,时间返回 24 小时时间并每天重复闹钟。 public setAlarm(String time, Context context){ String[] strTime
在我的 android 应用程序中,我设置了一个我想重复出现的闹钟,因此使用了 AlarmManager.setRepeating()。 我不想自己跟踪警报是否已设置(听起来是个坏主意,有时很容易失败
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
我有一个项目列表,我想几乎每天都发送通知。但不是在用户可能正在 sleep 的半夜。 可能是上午 8 点之后的任何时间。 我知道我需要通过 AlarmManager 使用它。 我非常熟悉 AlarmM
我没有找到解决这个荒谬问题的方法。 setRepeating() 和 setInexactRepeating() 根本不触发。我尝试了这两种方法。以下是我的代码: Intent intentServi
我正在创建一个应用程序,每天提醒用户 X 次某事。我想知道创建是否更好: 多个 setRepeating 警报,间隔为 24 小时 一个 setRepeating 闹钟,间隔为 1 小时 [或半小时]
要求:- 我需要在一周中选定的几天触发警报以及警报开始的日期(例如,我想在每周的周五和周六从 2017 年 5 月 26 日下午 6:45 开始触发警报) 问题:- 当从循环内调用 AlarmMana
我进入了我想在特定时间触发服务的场景。 据我所知...我需要使用 AlarmManager,我在听到这个问题,Using Alarmmanager to start a service at spec
在搜索了 stackoverflow 和网络之后,我仍然感到沮丧并遇到了问题。我正在尝试提供一项服务,该服务会定期轮询传感器并将该数据发送到某个地方。我从底层开始,只是试图让服务每隔 x 秒显示一次
这个问题在这里已经有了答案: to know next alarm time using setRepeating() method (1 个回答) 关闭 5 年前。 我根据我的应用程序要求使用 s
AlarmManager mgr= (AlarmManager)ctxt.getSystemService(Context.ALARM_SERVICE); Intent i=new I
我的应用需要非常准确的重复闹钟计时。从 API 19 开始,AlarmManager setRepeating 现在不能准确地节省电量(保存树木和所有)。 是否有任何解决方法可以让 API 19 的
下面的参数是什么: alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
我是一名优秀的程序员,十分优秀!