如何合法地防止通知在Android中被删除

kq0g1dla  于 2023-04-18  发布在  Android
关注(0)|答案(2)|浏览(170)

bounty将在21小时后到期。回答此问题可获得+50声望奖励。Jammy Lee希望引起更多关注此问题。

我正在开发一个应用程序,并希望通过添加正在进行的通知为用户提供功能的快捷方式。这有点像一些字典应用程序这样做,他们提供快捷方式作为快速搜索的通知。
问题是,即使我有setOngoing(true)和setAutoCancel(false),它仍然会被删除,一旦应用程序从多任务窗格关闭。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            CharSequence name = "C1";
            String description = "C1 is C1";
            int importance = NotificationManager.IMPORTANCE_DEFAULT;
            NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
            channel.setDescription(description);
            // Register the channel with the system; you can't change the importance
            // or other notification behaviors after this
            NotificationManager notificationManager = getSystemService(NotificationManager.class);
            notificationManager.createNotificationChannel(channel);
        }


NotificationCompat.Builder builder = new NotificationCompat.Builder(MainActivity.this, CHANNEL_ID)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle("XXXX")
                .setContentText("XXXXXXXX")
                .setPriority(NotificationCompat.PRIORITY_MAX)
                .setContentIntent(pendingIntent)
                .setOngoing(true) 
                .setAutoCancel(false);
        NotificationManagerCompat notificationManager = NotificationManagerCompat.from(MainActivity.this);

        // notificationId is a unique int for each notification that you must define
        notificationManager.notify(NOTIFICATION_ID_2, builder.build());
mklgxw1f

mklgxw1f1#

您可以启动一个 * 前台服务 *,以便您的通知是持久的。您需要将FOREGROUND_SERVICE权限添加到manifest,然后从应用程序构建/启动服务。然后,从服务内部设置通知。
The Android docs for foreground services有一个很好的演练。

hjqgdpho

hjqgdpho2#

在Android 13(API级别33)中,与前台服务链接的通知 * 可以 * 由用户通过滑动手势解除。Android的早期版本不允许解除通知,直到前台服务被停止或从前台删除。
要在API 33及更高版本中使通知不可由用户解除,请使用Notification.Builder并在创建期间将setOngoing()方法设置为TRUE
Android文档:

  • 处理用户启动的停止
  • 用户解雇通知

相关问题