Entonces tengo una aplicación que quiero enviarme una notificación todos los días a las 6 am (medianoche), estoy trabajando con WorkManager para eso después de probar Alarmas. Actualmente tengo una clase que extiende Worker de la siguiente manera:

public class NotificationWorker extends Worker {
    Context context;

    public NotificationWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);
        this.context = context;
    }

    @NonNull
    @Override
    public Result doWork() {
        Intent resultIntent = new Intent(context, LoginActivity.class).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent resultPendingIntent = PendingIntent.getActivity(context, 0, resultIntent, 0);

        Notification.Builder notification = new Notification.Builder(context)
                .setSmallIcon(R.mipmap.ic_launcher_round)
                .setContentTitle("App Title")
                .setContentText("Some Text...")
                .setContentIntent(resultPendingIntent);

        NotificationManager notificationManager = (NotificationManager) HomePage.getHomePage().getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(1, notification.build());

        return Result.success();
    }
}

Es llamado por este fragmento de código que está dentro de mi función onCreate () de mi Actividad

WorkRequest notificationRequest = new OneTimeWorkRequest.Builder(NotificationWorker.class).build();
        WorkManager.getInstance(this).enqueue(notificationRequest);

Se llama al método doWork () pero no se muestra ninguna notificación. Cualquier ayuda sería apreciada.

  • Este código "debería" mostrar solo la notificación al cargar la Actividad, ¿alguna idea sobre cómo puedo hacer que se repita todos los días? (preferiblemente con WorkManager también)
1
Maarten Magits 25 ago. 2020 a las 16:10

1 respuesta

La mejor respuesta

A partir de Android 26, las notificaciones deben pasar a un canal de notificación adecuado.

Precaución: si se dirige a Android 8.0 (nivel de API 26) y publica una notificación sin especificar un canal de notificación, la notificación no aparece y el sistema registra un error.

Consulte los siguientes documentos para obtener información.

Puede usar el siguiente código para construir el canal, donde CHANNEL_ID es una cadena de su elección

private void createNotificationChannel() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            CharSequence name = ctx.getString(R.string.my_channel_name);
            String description = ctx.getString(R.string.my_channel_description);
            int importance = NotificationManager.IMPORTANCE_DEFAULT;
            NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
            channel.setDescription(description);
            //Register Channel
            NotificationManager notificationManager = ctx.getSystemService(NotificationManager.class);
            notificationManager.createNotificationChannel(channel);

        }
    }

Luego, al inicializar su Creador de notificaciones, pase un parámetro adicional para el ID del canal

Notification.Builder notification = new Notification.Builder(context, CHANNEL_ID)

Por lo general, también querrá pasar una prioridad a su constructor de la siguiente manera, para admitir Android 25 y versiones anteriores

notification.setPriority(NotificationCompat.PRIORITY_DEFAULT);
0
Kyle R 25 ago. 2020 a las 15:17