繁体   English   中英

通知管理器不显示通知

[英]Notification manager is not showing notifications

我正在构建一个提醒应用程序。 为此,我需要在触发警报管理器时显示通知。 我已经实现了一点。 警报正在工作,但没有显示任何通知。

package com.aakash.assignmentone;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Build;
import android.widget.Toast;

import androidx.core.app.NotificationCompat;
public class broadcastForReminder extends BroadcastReceiver {
    static MediaPlayer mp;
    static final String chID = "Reminder";
    @Override
    public void onReceive(Context context, Intent intent) {
        String msg = intent.getStringExtra("rMsg");
        if(intent.getStringExtra("rMsg") != null && intent.getStringExtra("rMsg").equals(msg)){
            NotificationManager notMan = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                String name = "REMINDER NOTIFICATION";
                String description = "Notification channel for notifying while reminder beeps.";
                int importance = NotificationManager.IMPORTANCE_HIGH;
                NotificationChannel channel = new NotificationChannel(chID, name, importance);
                channel.setDescription(description);
                notMan.createNotificationChannel(channel);
            }
            NotificationManager manager =
                    (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

            NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
                    .setSmallIcon(R.drawable.ic_baseline_alarm_24)
                    .setContentTitle("It's time!")
                    .setContentText(msg)
                    .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                    .setAutoCancel(true);
            Intent i = new Intent(context, MainActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, i, PendingIntent.FLAG_ONE_SHOT);
            builder.setContentIntent(pendingIntent);
            manager.notify(1, builder.build());
        }
        mp = MediaPlayer.create(context, R.raw.alarm_beep);
        mp.start();
    }
}

更新

我唯一错过的是在初始化通知构建器时传递通道 ID。

代替

NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
                    .setSmallIcon(R.drawable.ic_baseline_alarm_24)
                    .setContentTitle("It's time!")
                    .setContentText(msg)
                    .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                    .setAutoCancel(true);

工作解决方案是

NotificationCompat.Builder builder = new NotificationCompat.Builder(context, chID)
                    .setSmallIcon(R.drawable.ic_baseline_alarm_24)
                    .setContentTitle("It's time!")
                    .setContentText(msg)
                    .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                    .setAutoCancel(true);

而不是这个

         manager.notify(1, builder.build());

尝试这个:

         manager.notify(getResources().getInteger(R.id.yourNotificationid),builder.build());

在初始化通知构建器时,现在通知通道是必须的。 因此,在上述问题中,我在初始化通知生成器时忘记指定通知通道的 ID。

正确的顺序是

Builder(Context context, String channelId)

因此修正是

            NotificationCompat.Builder builder = new NotificationCompat.Builder(context, chID)
                    .setSmallIcon(R.drawable.ic_baseline_alarm_24)
                    .setContentTitle("It's time!")
                    .setContentText(msg)
                    .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                    .setAutoCancel(true);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM