Cómo crear una notificación activada por time que funciona en todos los dispositivos Android

Estoy tratando de hacer una notificación que se active después de que haya transcurrido un cierto time. En un bash de lograr esto, tengo esta class AlarmReceiver que henetworkinga del receptor BroadCast y funciona en dispositivos con una API API 23. No funciona en mi emulador que actualmente ejecuta API 27. ¿Alguna pista de lo que estoy haciendo mal?

class AlarmReceiver : BroadcastReceiver() { companion object { val PRIMARY_CHANNEL = "dj" } override fun onReceive(context: Context, intent: Intent) { val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager val notificationIntent = Intent(context, NotificationActivity::class.java) val stackBuilder = TaskStackBuilder.create(context) stackBuilder.addParentStack(NotificationActivity::class.java) stackBuilder.addNextIntent(notificationIntent) val pendingIntent = stackBuilder.getPendingIntent(100, PendingIntent.FLAG_UPDATE_CURRENT) if (android.os.Build.VERSION_CODES.O <= android.os.Build.VERSION.SDK_INT){ //I create the notification channel on the next line, but it doesn't seem to work val notificationChannel = NotificationChannel(PRIMARY_CHANNEL, "DailyJokes", NotificationManager.IMPORTANCE_DEFAULT) notificationChannel.lightColor = Color.GREEN notificationChannel.lockscreenVisibility = Notification.VISIBILITY_PRIVATE notificationManager.createNotificationChannel(notificationChannel) val notification = Notification.Builder(context, PRIMARY_CHANNEL) .setContentIntent(pendingIntent) .setChannelId("dj") .setContentText("KDW") .setSmallIcon(R.mipmap.ic_launcher_round) .setContentTitle("CCC") .build() notificationManager.notify(1,notification) } else { var builder = NotificationCompat.Builder(context, "dj") val sound = Uri.parse("android.resource://" + context.packageName + "/" + "raw/drumroll") builder = builder .setSmallIcon(R.mipmap.ic_launcher_round) .setColor(Color.BLUE) .setContentTitle("Content Title") .setTicker("TICKER Text") .setContentText("KDW setContentText") .setAutoCancel(true) .setContentIntent(pendingIntent) .setChannelId("dj") .setSound(sound) notificationManager.notify(1, builder!!.build()) } } } 

Aquí está el código que desencadena la notificación, ¿algo aquí?

 class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_notification) val alarmManager = getSystemService(Context.ALARM_SERVICE) as AlarmManager val notificationIntent = Intent("android.media.action.DISPLAY_NOTIFICATION") notificationIntent.addCategory("android.intent.category.DEFAULT") val broadcast = getBroadcast(this, 100, notificationIntent, FLAG_UPDATE_CURRENT) val cal = Calendar.getInstance() cal.add(Calendar.SECOND, 5) alarmManager.set(AlarmManager.RTC_WAKEUP, cal.timeInMillis, broadcast) } } 

También tengo un receptor en mi Manifiesto:

 <receiver android:name=".AlarmReceiver"> <intent-filter> <action android:name="android.media.action.DISPLAY_NOTIFICATION" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> 

Incluso con todo esto, el error aún acecha. Soy nuevo en Kotlin, hoy hace una semana desde que comencé. Mi experiencia rápida me preparó bien, pero parece que no puedo controlar las notifications: /

Por lo que puedo decir de su código, necesita registrar el receptor en el Manifiesto o en un context.

https://developer.android.com/guide/components/broadcasts.html

es tu canal incluso creado? su comparación está en la dirección incorrecta ->

android.os.Build.VERSION_CODES.O <= android.os.Build.VERSION.SDK_INT debería ser >= lugar

y solo la creación del canal necesita ser protegida contra O, no la creación de notificación.