Java AlarmManager setInexactRepeating、setWindow、setRepeating方法在一周内从循环内调用时不会触发报警
要求:-Java AlarmManager setInexactRepeating、setWindow、setRepeating方法在一周内从循环内调用时不会触发报警,java,android,alarmmanager,android-pendingintent,android-calendar,Java,Android,Alarmmanager,Android Pendingintent,Android Calendar,要求:- 我需要在一周中选定的几天发出警报,以及警报开始的日期(例如,我想在2017年5月26日开始的每周的星期五和星期六下午6:45发出警报) 问题:- 当从循环中调用AlarmManagersetInexactRepeating、setWindow或setRepeating方法时,BroadcastReceiver的onReceive()方法不会执行 用于此任务的代码如下所述:- AndroidManifest.xml <?xml version="1.0" encoding="utf
我需要在一周中选定的几天发出警报,以及警报开始的日期(例如,我想在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>
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>
真的
假的
@颜色/状态\u栏\u颜色
@颜色/状态\u栏\u颜色
@颜色/蓝色
@颜色/文本\标题\颜色\黑色
@颜色/文本\标题\颜色\黑色
@颜色/文字\u子标题\u颜色\u浅色\u黑色
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>
Hi Aniruddh,您是否通过设置周五和周六的警报来测试此代码,我累了,如果我只为星期五设置闹钟,它可以正常工作,但如果我同时为星期五和星期六设置闹钟,在循环中为每个设置毫秒,它就不工作了。@commonware-你能给出这个问题的解决方案吗?
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>