Intent i = new Intent(getBaseContext(), MyReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 100,i, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 5000, pi);
}
});
}
private void create()
{
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
String tag="mm";
Log.d(tag,"xyz");
NotificationChannel notificationChannel = new NotificationChannel("abc","abc",NotificationManager.IMPORTANCE_HIGH);
NotificationManager notificationManager = getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(notificationChannel);
}
//接收器类别
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NotificationCompat.Builder notification = new NotificationCompat.Builder(context,"abc")
.setContentTitle("Title")
.setContentText("text")
.setPriority(NotificationManager.IMPORTANCE_HIGH)
.setSmallIcon(R.drawable.ic_launcher_background);
NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context);
notificationManagerCompat.notify(1,notification.build());
}
}
清单文件也被更新。我在onCreate中调用了create函数。如果有人可以帮助我。我已经坚持了一个星期
使用警报的首要考虑因素之一是警报的类型-
[有两种常规的警报时钟类型:“经过时间”和““实时时钟”(RTC)。过去的实时时间使用“系统自开机”作为参考,实时时钟使用UTC(壁钟)时间。这意味着经过的实时时间适合于设置基于随着时间的流逝(例如,每30分钟触发一次警报秒),因为它不受时区/地区的影响。实时时钟类型更适合于取决于电流的警报语言环境。
ELAPSED_REALTIME
-根据自设备启动以来的时间触发挂起的意图,但不唤醒设备。经过的时间包括设备进入睡眠状态的任何时间。
ELAPSED_REALTIME
-在自设备启动以来经过指定的时间长度后,唤醒设备并激发挂起的意图。
也,ELAPSED_REALTIME_WAKEUP
返回自boot起的毫秒数,包括睡眠时间。尝试将其替换为ELAPSED_REALTIME_WAKEUP
并返回当前时间,以毫秒为单位。
用于唤醒设备以在指定时间激发待处理的意图。您可以使用SystemClock#elapsedRealtime()
警报类型。
AFAIK,AndroidQ中没有对您的上下文有影响的行为更改。
您也可以查看此S / O SystemClock#elapsedRealtime()