我编写了这段代码,每天都会执行并显示通知:
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);
}
}
最明显的文件如下所示:
<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>
但我没有收到任何通知。有谁能建议我如何解决这个问题?
此外,以下代码的含义是什么
Calendar calendar = Calendar.getInstance();
if (calendar.get(Calendar.HOUR_OF_DAY) >= 7) {
calendar.add(7, 1);
}
答案 0 :(得分: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);
您实际上需要获得系统服务 - Context.ALARM_SERVICE
而不是将重复频率设置为1000毫秒,您需要使用AlarmManager.INTERVAL_DAY
,以便在所需的设定时间内每天触发它。
关于此代码的含义:
Calendar calendar = Calendar.getInstance();
if (calendar.get(Calendar.HOUR_OF_DAY) >= 7) {
calendar.add(7, 1);
}
这里calendar.add(7, 1)
对我来说并不合理。日历的add()函数用于将给定金额添加到特定日历字段,由唯一整数标识。
如果您的代码行calendar.add(7, 1);
被替换为calendar.add(Calendar.DATE, 1);
,则此代码可能会有所帮助。
如果当前的小时数大于7(即当前时间超过上午7点),它将实际检查注册警报时,将比设置日历对象(稍后用于注册警报)下一个日期上午7点(明天)。
此外,我对您的清单文件中的声明表示怀疑。您需要使用您所指的来源进行交叉检查。
通常,AlarmManager的清单文件结构应该如下所示:
<application>
<activity>
<intent-filter>
<action/>
<category/>
</intent-filter>
</activity>
<receiver android:name=".DailyNotification" />
</application>
希望有所帮助。