簡體   English   中英

使用警報管理器的每日通知

[英]Daily notification using alarm manager

我寫了這個代碼,每天都會執行並顯示一個通知:

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

部分回答。

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)對我來說並不是很有意義。 日歷的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>

希望有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM