美文网首页
Android通知显示随笔(已兼容到Android32)

Android通知显示随笔(已兼容到Android32)

作者: 晖仔Milo | 来源:发表于2023-11-09 10:05 被阅读0次

    1、通知构建者

    public class AiNotification {
    
        public NotifyChannel channel;
        public int id;
        public int priority;
        public int importance;
        public String title;
        public String text;
        public PendingIntent pendingIntent;
        public CharSequence tickerText;
    
        public int flags;
    
        public static final class AiNotificationBuilder {
            private NotifyChannel channel = NotifyChannel.Normal;
    
            private int priority = Notification.PRIORITY_HIGH;
            private int importance;
            private String title = "通知";
            private String text = "有一条未读消息";
            private PendingIntent pendingIntent;
            private CharSequence tickerText = "刚刚收到一条通知";
            private int flags = Notification.FLAG_AUTO_CANCEL;
    
            public AiNotificationBuilder() {
                if (Build.VERSION.SDK_INT >= 24) {
                    importance = NotificationManager.IMPORTANCE_HIGH;
                }
            }
    
            public AiNotificationBuilder setImportance(int importance) {
                this.importance = importance;
                return this;
            }
    
            public AiNotificationBuilder setChannel(NotifyChannel channel) {
                this.channel = channel;
                return this;
            }
    
            public AiNotificationBuilder setPriority(int priority) {
                this.priority = priority;
                return this;
            }
    
            public AiNotificationBuilder setTitle(String title) {
                this.title = title;
                return this;
            }
    
            public AiNotificationBuilder setText(String text) {
                this.text = text;
                return this;
            }
    
            public AiNotificationBuilder setPendingIntent(PendingIntent pendingIntent) {
                this.pendingIntent = pendingIntent;
                return this;
            }
    
            public AiNotificationBuilder setTickerText(CharSequence tickerText) {
                this.tickerText = tickerText;
                return this;
            }
    
            public AiNotificationBuilder setFlags(int flags) {
                this.flags = flags;
                return this;
            }
    
            public synchronized AiNotification build() {
                AiNotification aiNotification = new AiNotification();
                NotificationFactory.NotificationId += 1;
                aiNotification.id = NotificationFactory.NotificationId;
    
                aiNotification.priority = this.priority;
                aiNotification.pendingIntent = this.pendingIntent;
                aiNotification.tickerText = this.tickerText;
                aiNotification.title = this.title;
                aiNotification.text = this.text;
                aiNotification.flags = this.flags;
                aiNotification.channel = this.channel;
                aiNotification.importance = this.importance;
    
                if (this.pendingIntent == null) {
                    //显式intent
    //                Intent intent = new Intent(CommonData.app.getApplicationContext(), MainActivity.class);
                    //隐式intent
                    Intent intent = new Intent();
                    intent.setAction("aiteacher.action.MainActivity");
                    intent.addCategory(Intent.CATEGORY_DEFAULT);
                    intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
                    this.pendingIntent = PendingIntent.getActivity(CommonData.app.getApplicationContext(), 0, intent,
                            PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE);
                    aiNotification.pendingIntent = this.pendingIntent;
                }
    
                return aiNotification;
            }
        }
    
    }
    

    2、通知制造者 + 通知显示者

    public class NotificationFactory {
        private static final String TAG = "NotificationFactory";
    
        public static int NotificationId = 19920120;
    
        public static void showNotification(AiNotification aiNotification) {
            Context context = SampleApplicationLike.getInstance().getApplicationContext();
            NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    
            Notification notification = createNotification(aiNotification);
    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationChannel channel = new NotificationChannel(aiNotification.channel.channelId, aiNotification.channel.channelName,
                        aiNotification.importance);
                //锁屏显示通知
                channel.setLockscreenVisibility(Notification.VISIBILITY_SECRET);
                //桌面launcher的消息角标
                channel.canShowBadge();
                nm.createNotificationChannel(channel);
            }
    
            nm.notify(aiNotification.id, notification);
            FZLogger.d(TAG, "showNotification, id = " + aiNotification.id);
        }
    
        public static Notification createNotification(AiNotification aiNotification) {
            Context context = SampleApplicationLike.getInstance().getApplicationContext();
            NotificationCompat.Builder builder = new NotificationCompat.Builder(context, aiNotification.channel.channelId);
    
            builder.setContentTitle(aiNotification.title)
                    .setContentText(aiNotification.text)
                    .setContentIntent(aiNotification.pendingIntent)
                    .setFullScreenIntent(aiNotification.pendingIntent, true)
                    .setSmallIcon(R.drawable.push_small)
                    .setAutoCancel(true)
                    .setDefaults(Notification.DEFAULT_ALL)
                    .setPriority(aiNotification.priority)
                    .setCategory(Notification.CATEGORY_MESSAGE)
                    .setWhen(System.currentTimeMillis())
                    .setTicker(aiNotification.tickerText);
    
            return builder.build();
        }
    
    
    }
    

    3、调用者

    NotificationFactory.showNotification(new AiNotification.AiNotificationBuilder().build());
    

    4、另外附上隐私Activity的声明

            <activity
                android:name=".ui.MainActivity"
                android:exported="false"
                android:screenOrientation="portrait"
                android:taskAffinity=""
                android:excludeFromRecents="true">
                <intent-filter>
                    <action android:name="aiteacher.action.MainActivity" />
                    <category android:name="android.intent.category.DEFAULT" />
                </intent-filter>
            </activity>
    

    相关文章

      网友评论

          本文标题:Android通知显示随笔(已兼容到Android32)

          本文链接:https://www.haomeiwen.com/subject/icecwdtx.html