How to show a Notification on Oreo?

前端 未结 1 474
孤城傲影
孤城傲影 2021-01-29 09:01

Notification doesn\'t shown on above V26 API.Notification cshown on v25 but when i checked it on v27 than the notification doesn\'t appear. My code to StartService and create n

相关标签:
1条回答
  • 2021-01-29 10:02

    Create a new class and name it NotificationUtils, extending ContextWrapper.

    import android.app.Notification;
    import android.app.NotificationChannel;
    import android.app.NotificationManager;
    import android.content.Context;
    import android.content.ContextWrapper;
    import android.graphics.Color;
    
    public class NotificationUtils extends ContextWrapper {
    
        private NotificationManager mManager;
        public static final String ANDROID_CHANNEL_ID = "com.testandroid.pushnotifications.ANDROID";
    
        public static final String ANDROID_CHANNEL_NAME = "ANDROID CHANNEL";
    
        public NotificationUtils(Context base) {
            super(base);
            createChannels();
        }
    
        public void createChannels() {
    
            // create android channel
            NotificationChannel androidChannel = new NotificationChannel(ANDROID_CHANNEL_ID,
                    ANDROID_CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);
            // Sets whether notifications posted to this channel should display notification lights
            androidChannel.enableLights(true);
            // Sets whether notification posted to this channel should vibrate.
            androidChannel.enableVibration(true);
            // Sets the notification light color for notifications posted to this channel
            androidChannel.setLightColor(Color.GREEN);
            // Sets whether notifications posted to this channel appear on the lockscreen or not
            androidChannel.setLockscreenVisibility(Notification.VISIBILITY_PRIVATE);
    
            getManager().createNotificationChannel(androidChannel);
    
    
    
        private NotificationManager getManager() {
            if (mManager == null) {
                mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
            }
            return mManager;
        }
    }
    

    We specify which notification should be sent to a channel in the Notification.Builder (Android API 25) constructor, where we pass it the channel id as the second argument.

    public Notification.Builder getAndroidChannelNotification(String title, String body) {
        return new Notification.Builder(getApplicationContext(), ANDROID_CHANNEL_ID)
                .setContentTitle(title)
                .setContentText(body)
                .setSmallIcon(android.R.drawable.stat_notify_more)
                .setAutoCancel(true);
    }
    

    Let's create push notification from any of the activity to test,

    Put in global scope:

    private NotificationUtils mNotificationUtils;
    

    Initialize in onCreate

    mNotificationUtils = new NotificationUtils(this);
    

    Generate notification on button click to test:

    buttonSend.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    String title = "Test Notification";
                    String text= "Oreo Device Push Notification is here";
    
                    if(!TextUtils.isEmpty(title) && !TextUtils.isEmpty(text)) {
                        Notification.Builder nb = mNotificationUtils.
                                getAndroidChannelNotification(title, text);
    
                        mNotificationUtils.getManager().notify(101, nb.build());
                    }
                }
            });
    
    0 讨论(0)
提交回复
热议问题