检查AlarmManager是否存在始终返回false

时间:2016-07-20 12:32:26

标签: android alarmmanager android-pendingintent

我想在constructor的帮助下显示每日通知。

它正常工作,直到我尝试在重启后使其持久化

我按如下方式创建闹钟:

data class DataObject(val id: Int, val name: String) {
    object FromCursorFactory {
        fun create(id: Int, context: Context): DataObject {
            val name = context.fetchName()
            return DataObject(id, name)
        }
    }
}

这是我的广播接收器:

AlarmManager

编辑: 这是我关闭并打开闹钟时的日志:

if (switch_notif.isChecked()){ //in my activity's code
    NotificationReceiver.scheduleAlarms(getApplicationContext()); //allow the notification

} else {
    NotificationReceiver.stopNotif(getApplicationContext()); //disable them
}

1 个答案:

答案 0 :(得分:3)

也许,alarmUp总是假的,因为您使用不同的Intent来比较它们

检查它们是否存在:

boolean alarmUp = (PendingIntent.getBroadcast(context, 100, new Intent(), PendingIntent.FLAG_NO_CREATE) != null);

创建闹钟:

Intent intent1 = new Intent(context, Notification.class);
intent1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 100, intent, PendingIntent.FLAG_UPDATE_CURRENT);

正如您所看到的,Intent在两个标准中的使用都不同。 尝试检查如下:

Intent tempIntent = new Intent(context, Notification.class);
tempIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
boolean alarmUp = (PendingIntent.getBroadcast(context, 100, tempIntent, PendingIntent.FLAG_NO_CREATE) != null);

顺便说一下

重启期间会破坏所有警报...因此,您应该注册BroadcastReceiver以接收BOOT_COMPLETED个事件。这样,当您收到BOOT_COMPLETED事件时,您就知道您的设备已重新启动且没有警报处于活动状态...然后,您再次将其复制。