为什么检查Android Kotlin通知是否存在总是返回true?

问题描述 投票:0回答:1

为了避免每次都创建通知,我创建了这个方法:

fun checkAlarm(context: Context): Boolean {

        val alarmIntent = Intent(context, NotifierReceiver::class.java)
        alarmIntent.action = ACTION_BD_NOTIFICATION

        val intFlags = if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            PendingIntent.FLAG_IMMUTABLE
        }
        else{
            PendingIntent.FLAG_NO_CREATE
        }

        return PendingIntent.getBroadcast(
            context, notificationId,
            alarmIntent,
            intFlags
        ) != null
    }

这是设置方法

fun setAlarm(context: Context, notificationFrequency: Long) {
        val notificationFrequencyMs = TimeUnit.MINUTES.toMillis(notificationFrequency)

        alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager

        val alarmIntent = Intent(context, NotifierReceiver::class.java)
        alarmIntent.action = ACTION_BD_NOTIFICATION

        val intFlags = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
        }
        else{
            PendingIntent.FLAG_UPDATE_CURRENT
        }

        val pendingAlarmIntent = PendingIntent.getBroadcast(
            context,
            notificationId,
            alarmIntent,
            intFlags
        )

        alarmManager!!.setRepeating(
            AlarmManager.RTC_WAKEUP,
            System.currentTimeMillis(),
            notificationFrequencyMs,
            pendingAlarmIntent
        )

        /* Restart if rebooted */
        val receiver = ComponentName(context, BootReceiver::class.java)
        context.packageManager.setComponentEnabledSetting(
            receiver,
            PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
            PackageManager.DONT_KILL_APP
        )
    }

在我的片段中我称之为:

if (!alarm.checkAlarm(requireContext()) && notificationIsActive) {
            alarm.setAlarm(
                requireContext(),
                30
            )
        }

checkAlarm 始终返回 true,并且从未设置通知,这怎么可能?我在片段的 OnStart 中调用这个方法,并且 setAlarm 以前从未调用过它

android kotlin notifications
1个回答
0
投票

单独使用

FLAG_IMMUTABLE
不会检查
PendingIntent
是否已经存在 - 它只会使其不可变。你还需要
FLAG_NO_CREATE
:

val intFlags = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    PendingIntent.FLAG_NO_CREATE or PendingIntent.FLAG_IMMUTABLE
} else {
    PendingIntent.FLAG_NO_CREATE
}
© www.soinside.com 2019 - 2024. All rights reserved.