[英]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);
}
部分回答。
替換代碼中的行
((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字段,由唯一整數標識。
如果您的代碼行為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>
希望有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.