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>