3

我编写了这段代码,每天都会执行并显示一个通知:

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);
}
4

1 回答 1

1

部分回答。

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,以便每天在所需的设置时间触发它。

2.

关于这段代码的含义:

Calendar calendar = Calendar.getInstance();
if (calendar.get(Calendar.HOUR_OF_DAY) >= 7) {
    calendar.add(7, 1);
}

calendar.add(7, 1)对我来说并不完全合理。calendar 的 add() 函数用于将给定的金额添加到特定的 Calendar 字段,由唯一的整数标识。

如果您的代码行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>

希望有帮助。

于 2013-07-31T11:44:43.507 回答