我必須在一天中的不同時間發送3個不同的通知(不同的內容)。 繼官方文檔後,https://developer.android.com/training/scheduling/alarms.html#type, 我能夠在指定的時間發送通知,但在更改每個通知的內容時遇到了一些麻煩。以下是設置通知的方法,並在MainActivity的onCreate()方法中調用。Android調度與廣播接收器重複報警
public void setNotification() {
Intent intent = new Intent(this, MyBroadcastReceiver.class);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
for (int id = 0; id < 3; id++) {
Calendar calendar = Calendar.getInstance();
// Defining different pendingIntent
switch (id){
case 0:
calendar.set(Calendar.HOUR_OF_DAY, 9);
break;
case 1:
calendar.set(Calendar.HOUR_OF_DAY, 14);
break;
case 2:
calendar.set(Calendar.HOUR_OF_DAY, 20);
break;
}
if(calendar.getTimeInMillis() < System.currentTimeMillis()){
calendar.add(Calendar.DATE, 1);
}
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, id, intent, 0);
// setRepeating() schedules an alarm
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
}
}
我知道我可以使用Intent.putExtra()功能發送數據,可用於識別的意圖,但如果應用程序被殺害這一數據將會丟失。 即使應用程序未運行或應用程序被終止或設備啓動,我也希望它能夠正常工作。讀完一些資料後,我發現我可以使用BOOT_COMPLETE監聽器在設備啓動後設置告警。因爲在onCreate()方法設置的通知,通知顯示,每次我運行應用程序,即使我嘗試用下面的代碼
if(calendar.getTimeInMillis() < System.currentTimeMillis()){
calendar.add(Calendar.DATE, 1);
}
目前的onReceive方法看起來像這樣
public void onReceive(Context context, Intent intent) {
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(context)
.setSmallIcon(R.mipmap.app_icon)
.setContentTitle("Title")
.setContentText("Message");
Intent resultIntent = new Intent(context, MainActivity.class);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addParentStack(MainActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.notify(0, mBuilder.build());
}
來解決這個我需要幫助決定應該在哪裏放置setNotification()方法,以便它將所有警報註冊一次,以及如何識別哪個意圖即將到來,以便採取適當的行動。一種解決方法是使用意向過濾器定義3個不同的broadcastReceivers,並在創建它們時設置意向URI。這是正確的方式還是有其他簡單的解決方案?
謝謝您的建議。我會相應地修改我的代碼。 – Ranjan