我正试图在将来设置通知.我有创建通知的代码,但我找不到安排它的选项.
我该如何安排通知?
我有一组警报,我需要在重启后保留.我尝试过使用启动接收器,但它们不会重新启动.我不确定我是否理解启动接收器以及如何重新启动所有警报.我已经有一个接收器用于我的通知,但不知道我是否可以使用相同的接收器或我是否需要一个新接收器?
谁能指点我任何好的教程或帮助我?
干杯
代码:
DatabaseHandler db = new DatabaseHandler(this);
List<UAlarm> alarms = db.getAllAlarms();
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
for (UAlarm ua : alarms) {
String programme = ua.getTitle();
String startTime = ua.getStart();
String endTime = ua.getEnd();
String nowPlaying = ua.getChannel();
db.addAlarm(new UAlarm(programme, startTime, endTime, nowPlaying, ""));
final UAlarm ut = new UAlarm();
ut.setTitle(programme);
ut.setStart(startTime);
ut.setEnd(endTime);
ut.setChannel(nowPlaying);
ut.setId(db.getLastEntered());
String [] bla = startTime.split(":");
int hour = Integer.parseInt(bla[0].trim());
int minute = Integer.parseInt(bla[1].trim());
minute -= 2;
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, hour);
cal.set(Calendar.MINUTE, …Run Code Online (Sandbox Code Playgroud) 我曾尝试为特定日期和时间安排通知,但在大多数设备上似乎没有显示通知。在 android 9/8 之前,我使用了很容易使用的 AlarmManager,它可以工作,但最近 2 个版本的 android 已经改变了这一点......(感谢谷歌让一切变得更容易......)
所以,这是我的代码用于安排通知。我正在使用OneTimeWorkRequest
tag = new AlertsManager(this).getCarId(nrInmatriculare);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
Data inputData = new Data.Builder().putString("type", alarmType).putString("nrInmatriculare", nrInmatriculare).build();
OneTimeWorkRequest notificationWork = new OneTimeWorkRequest.Builder(NotifyWorker.class)
.setInitialDelay(calculateDelay(when), TimeUnit.MILLISECONDS)
.setInputData(inputData)
.addTag(String.valueOf(tag))
.build();
WorkManager.getInstance().enqueue(notificationWork);
}
else {
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, when, (24 * 60 * 60 * 1000), pendingIntent);
}
Run Code Online (Sandbox Code Playgroud)
然后我用来显示通知的类是这样的:
public class NotifyWorker extends Worker {
public NotifyWorker(@NonNull Context context, @NonNull WorkerParameters params) {
super(context, params);
}
@NonNull
@Override
public Worker.Result doWork() …Run Code Online (Sandbox Code Playgroud)