我正在创建一个简单的Android应用程序,其中创建了一个通知。
现在我想删除用户在特定时间后没有响应的通知
这意味着我想在五分钟后删除通知
答案 0 :(得分:8)
目前正确的解决方案可能是:
答案 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),我们可以使用它,
对于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);
}