如何在android中的特定时间后删除通知?

时间:2011-03-22 23:41:55

标签: android notifications

我正在创建一个简单的Android应用程序,其中创建了一个通知。

现在我想删除用户在特定时间后没有响应的通知

这意味着我想在五分钟后删除通知

5 个答案:

答案 0 :(得分:8)

目前正确的解决方案可能是:

  

NotificationCompat.Builder#setTimeoutAfter(long)

答案 1 :(得分:3)

您需要的是Alarmmanager和notificationmanger的组合。

注册将在5分钟内调用服务的警报管理器,并在服务实现中使用NotificationManager.cancel。

警报服务示例为here。我想你知道使用Notification Manager

答案 2 :(得分:0)

当应用程序关闭时,AlarmManager更常用于必须在后台运行的复杂服务。 您还可以在Handler中使用经典的Java Runnable来创建一个简单的小线程。

Handler h = new Handler();
    long delayInMilliseconds = 5000;
    h.postDelayed(new Runnable() {
        public void run() {
            mNotificationManager.cancel(id);
        }
    }, delayInMilliseconds);

另见:

Clearing notification after a few seconds

您也可以使用TimerTask-Class。

答案 3 :(得分:0)

 NotificationCompat.Builder notification = new NotificationCompat.Builder(context)
                .setSmallIcon(Util.getNotificationIcon(context))
                .setContentTitle(new SessionManager().getDomainPreference(context))
                .setAutoCancel(true)
                .setOngoing(false)
                .setPriority(NotificationCompat.PRIORITY_MAX)
                .setShowWhen(false)
                .setContentText(summaryText)
                .setTimeoutAfter(3000) // add time in milliseconds
                .setChannelId(CHANNEL_ID);

答案 4 :(得分:0)

对于Android> = 8.0(Oreo),我们可以使用它,

  

NotificationCompat.Builder#setTimeoutAfter(long)

对于Android <8.0,我们可以使用AlarmManager

将此添加到AndroidManifest.xml:

<receiver
    android:name=".AutoDismissNotification"/>

创建AutoDismissNotification.kt并添加以下代码:

class AutoDismissNotification : BroadcastReceiver() {

    companion object {
        private const val KEY_EXTRA_NOTIFICATION_ID = "notification_id"
    }

    override fun onReceive(context: Context, intent: Intent) {
        val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        notificationManager.cancel(intent.getIntExtra(KEY_EXTRA_NOTIFICATION_ID, 0))
    }

    fun setAlarm(context: Context, notificationId: Int, time: Long) {
        val alarmMgr = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
        val alarmIntent = Intent(context, AutoDismissNotification::class.java)
        alarmIntent.putExtra(KEY_EXTRA_NOTIFICATION_ID, notificationId)
        val alarmPendingIntent = PendingIntent.getBroadcast(context, notificationId, alarmIntent, PendingIntent.FLAG_ONE_SHOT)
        alarmMgr.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + time, alarmPendingIntent)
    }

    fun cancelAlarm(context: Context, notificationId: Int) {
        val alarmIntent = Intent(context, AutoDismissNotification::class.java)
        alarmIntent.putExtra(KEY_EXTRA_NOTIFICATION_ID, notificationId)
        val alarmPendingIntent = PendingIntent.getBroadcast(context, notificationId, alarmIntent, PendingIntent.FLAG_ONE_SHOT)
        val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
        alarmManager.cancel(alarmPendingIntent)
    }
}

构建通知时,添加以下内容:

long timeOut = 5 * 1000L; // Five seconds
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    builder.setTimeoutAfter(timeOut);
}
else {
    AutoDismissNotification().setAlarm(this, notificationId, timeOut);
}