我想创建一个警报,每小时触发一次通知。
我的代码可以在我的模拟器android 8.0上运行,但在我的设备上它没有,我有一个3T的android 3。我允许在手机中使用我的应用程序来显示通知。
我在onCreate中这样做。
calendar = Calendar.getInstance();
intent = new Intent(this, MyReceiver.class);
pendingIntent = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
am = (AlarmManager)this.getSystemService(ALARM_SERVICE);
am.cancel(pendingIntent);
这就是我在onDestroy
中所做的protected void onDestroy()
{
// telling the client thread to close
c.setCommand(6);
// setting an notification alarm every hour
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 60, pendingIntent);
super.onDestroy();
}
更新
我发现当应用程序关闭时,AlarmManager没有触发我的通知,那么我是否需要使用设置AlaramManager的服务?
答案 0 :(得分:0)
标准
AlarmManager
警报(包括setExact()和setWindow()) 被推迟到下一个维护窗口。
如果您需要设置在Doze中触发的警报,请使用setAndAllowWhileIdle()或setExactAndAllowWhileIdle()。
使用setAlarmClock()设置的警报继续正常启动 - 系统在警报触发前不久退出Doze。
它正在您的模拟器上工作,因为您可能没有启用打盹模式进行测试。
如果您的用例不需要在特定时间触发,请考虑使用WorkManager
。
答案 1 :(得分:0)
要在Android 8.0中显示通知,您需要使用NotificationChannel,而无需定义通知通道,您无法显示任何来源的通知(在您的情况下使用AlarmManager)
for Android Version> 8.0(奥利奥)
// Setup a NotificationChannel
public static final String ALARM_CHANNEL_ID = "alarm";
public static final String ALARM_CHANNEL_NAME = "Alarm Channel";
NotificationChannel alarmNotificationChannel = new NotificationChannel(ALARM_CHANNEL_ID, ALARM_CHANNEL_NAME, NotificationManager.IMPORTANCE_LOW);
String description = "Media playback controls";
playNotificationChannel.setDescription(description);
playNotificationChannel.setShowBadge(false);
playNotificationChannel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
getNotificationManager().createNotificationChannel(playNotificationChannel);
notification = new Notification.Builder(context)
.SetChannelId(ALARM_CHANNEL_ID)
.SetContentTitle(title)
.SetContentText(message)
.SetAutoCancel(true)
.SetSmallIcon(Resource.Drawable.icon)
.SetContentIntent(pending)
.Build();
//use the notification as you are already using it.
}