Android: уведомление не появляется на экране, только значок в строке состояния Oreo - PullRequest
1 голос
/ 25 марта 2019

Здравствуйте, я написал класс для создания уведомлений, но проблема в том, что в строке состояния появляется значок уведомления, блок уведомлений не появляется или даже на экране блокировки.В документе написано использование NotificationManagerCompat для отображения уведомлений ( ссылка на документы ).Вот мой код:

public class NotificationsService {
    private Context mContext;
    private NotificationManager mNotificationManager;

    public NotificationsService(Context context) {
        mContext = context;
    }

    public void sendNotification(int iconResource) {
        Notification notification = buildNotification(iconResource);
//        mNotificationManager.notify(0 /* ID of notification */, notification);

        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(mContext);
        notificationManager.notify(70, notification);
    }

    public Notification buildNotification(int iconResource) {
        String CHANNEL_ID = "type"; // The id of the channel.
        CharSequence channelName = "dsfsf";

        NotificationChannel channel = null;

        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
            channel = new NotificationChannel(CHANNEL_ID, channelName, NotificationManager.IMPORTANCE_DEFAULT);
        }

        Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(mContext, CHANNEL_ID)
                .setSmallIcon(iconResource)
                .setContentTitle("title")
                .setContentText("message")
                .setAutoCancel(true)
                .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                .setSound(defaultSoundUri)
                .setChannelId(CHANNEL_ID);
//                .setContentIntent(pendingIntent);

        mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && mNotificationManager != null) {
            mNotificationManager.createNotificationChannel(channel);
        }

        return notificationBuilder.build();
    }

И используя вот так:

NotificationsService notif = new NotificationsService(context);
  notif.sendNotification(R.mipmap.ic_launcher);

Появляется только значок приложения и уведомление только в строке состояния

enter image description here

1 Ответ

0 голосов
/ 25 марта 2019

Вам необходимо уведомить менеджера уведомлений о вашем уведомлении. Я разработал метод создания уведомлений для Oreo или верхнего SDK.

Вызовите этот метод с правильными аргументами в вашем коде ...

//This method is for Oreo
    @RequiresApi(api = Build.VERSION_CODES.O)
    public static void createSimpleNotificationForOreo(Context context, PendingIntent pendingIntent, String notificationTitle, String notificationContent, int notificationId, String notificationChannelId) {
        Notification.BigTextStyle bigText = new Notification.BigTextStyle();
        bigText.bigText(notificationContent);
        bigText.setBigContentTitle(notificationTitle);
        Notification.Builder notificationBuilder = new Notification.Builder(context)
                .setSmallIcon(R.drawable.ic_small_notification)
                .setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher))
                .setColor(context.getResources().getColor(R.color.colorPrimary))
                .setContentText(notificationContent)
                .setStyle(bigText)
                .setChannelId(notificationChannelId)
                .setContentIntent(pendingIntent);

        Notification notification = notificationBuilder.build();
        notification.flags |= Notification.FLAG_AUTO_CANCEL;
        notification.defaults |= Notification.DEFAULT_SOUND;
        notification.defaults |= Notification.DEFAULT_VIBRATE;
        NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        NotificationChannel mChannel = new NotificationChannel(notificationChannelId, NOTIFICATION_CHANNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
        if (notificationManager != null) {
            notificationManager.createNotificationChannel(mChannel);
            notificationManager.notify(notificationId, notification);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...