Java 使用报警管理器的每日通知
我已经编写了这段代码,它将每天执行并显示一个通知:Java 使用报警管理器的每日通知,java,android,alarmmanager,Java,Android,Alarmmanager,我已经编写了这段代码,它将每天执行并显示一个通知: class DailyNotification extends BroadcastReceiver { // Register the alarm and set it at 7am everyday (repeating mode) public static void registerAlarm(Context paramContext) { Calendar calendar = Calendar.get
class DailyNotification extends BroadcastReceiver {
// Register the alarm and set it at 7am everyday (repeating mode)
public static void registerAlarm(Context paramContext) {
Calendar calendar = Calendar.getInstance();
if (calendar.get(Calendar.HOUR_OF_DAY) >= 7) {
calendar.add(7, 1);
}
calendar.set(Calendar.HOUR_OF_DAY, 7);
calendar.set(Calendar.MINUTE, 00);
calendar.set(Calendar.SECOND, 00);
// PendingIntent that will perform a broadcast
PendingIntent localPendingIntent = PendingIntent
.getBroadcast(
paramContext,
22341,
new Intent(
"com.bestweightmanager.example.exampledailynotification.DAILY_NOTIFICATION"),
PendingIntent.FLAG_UPDATE_CURRENT);
// Retrieve an AlarmManager to set a repeating daily alarm
((AlarmManager) paramContext.getSystemService("alarm")).setRepeating(1,
calendar.getTimeInMillis(), 1000,
localPendingIntent);
}
}
manifiest文件如下所示:
<receiver
android:name=".utils.DailyNotification"
android:process=":remote" >
<intent-filter>
<action android:name="com.bestweightmanager.example.exampledailynotification.DAILY_NOTIFICATION" />
<action android:name="android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
部分回答
1.
替换代码中的行
((AlarmManager) paramContext.getSystemService("alarm")).setRepeating(1,
calendar.getTimeInMillis(), 1000,
localPendingIntent);
这一行:
((AlarmManager) paramContext.getSystemService(Context.ALARM_SERVICE)).setRepeating(1,
calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY,
localPendingIntent);
实际上,您需要获取系统服务-上下文。报警\u服务
您需要使用AlarmManager.INTERVAL\u DAY
,而不是将重复频率设置为1000毫秒,以便每天在所需的设置时间触发
2.
关于本规范的含义:
Calendar calendar = Calendar.getInstance();
if (calendar.get(Calendar.HOUR_OF_DAY) >= 7) {
calendar.add(7, 1);
}
这里的calendar.add(7,1)
对我来说意义不大。calendar的add()函数用于将给定金额添加到特定的日历字段中,该字段由唯一的整数标识
如果您的代码行calendar.add(7,1)代码>替换为calendar.add(calendar.DATE,1)代码>,则此代码可能有一定意义。
它将实际检查在注册报警时,如果当前一天的小时数大于7(即,当前一天的时间已超过上午7点),则将日历对象(稍后用于注册报警)设置为下一个日期(明天)的上午7点
3.
我也对你的清单文件中的声明表示怀疑。您需要与您引用的源代码进行交叉检查
通常,AlarmManager的清单文件的结构应类似于以下内容:
<application>
<activity>
<intent-filter>
<action/>
<category/>
</intent-filter>
</activity>
<receiver android:name=".DailyNotification" />
</application>
希望有帮助
<application>
<activity>
<intent-filter>
<action/>
<category/>
</intent-filter>
</activity>
<receiver android:name=".DailyNotification" />
</application>