Android 警报管理器在重新启动设备或从后台杀死应用程序后取消

Posted

技术标签:

【中文标题】Android 警报管理器在重新启动设备或从后台杀死应用程序后取消【英文标题】:Android Alarm manager cancelled after reboot device or application kill from background 【发布时间】:2015-11-19 06:47:08 【问题描述】:

我正在开发一个警报应用程序。当我设置警报并重新启动设备时,警报没有响起并且它正在某些特定设备中发生(xiomi note 4 和 samsung s5)。

我的注册接收者清单:

 <receiver
        android:permission="android.permission.RECEIVE_BOOT_COMPLETED"
        android:enabled="true"
        android:exported="true"
        android:process=":remote"
        android:name="com.electrovese.alarm.AlarmReceiver.AliveAllAlarmRecever">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="AliveAllAlarmRecever"/>
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>

谢谢。

【问题讨论】:

“当我设置闹钟并重启设备时,闹钟不响”——闹钟就是这样工作的;他们不会在重新启动后持续存在。您需要在设备启动时重置闹钟。 您使用RECEIVE_BOOT_COMPLETED 重置警报。重新启动后警报将始终被取消。使用RECEIVE_BOOT_COMPLETED 接收器使用正确的请求代码重置警报。 @NicholasTee 首先感谢您的回复。重启后设备广播接收器也不会在重启时被调用,如果我从后台杀死应用程序也不会被调用那么我如何在重启设备上使用正确的请求代码重置警报并从后台杀死应用程序?我已经在 XIOMI note 4 和 samsung s5 上测试过了。 【参考方案1】:

那是因为您需要告诉Android 当设备重新启动时您有一些接收器要运行。你可以这样做:

第 1 步:创建接收器:

class AlarmRebootReceiver : BroadcastReceiver() 

    override fun onReceive(context: Context?, intent: Intent?) 
        if (intent?.action.equals("android.intent.action.BOOT_COMPLETED")) 
            // oh well, device rebooted. do what you have to do here
    

之后,只需像这样注册清单:

<receiver android:name=".background.AlarmRebootReceiver"
                  android:enabled="true"
                  android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
            </intent-filter>
        </receiver>

完成!

【讨论】:

【参考方案2】:

您应该在小米设备的自动启动中检查您的应用:

设置 -> 权限 -> 自动启动

【讨论】:

以上是关于Android 警报管理器在重新启动设备或从后台杀死应用程序后取消的主要内容,如果未能解决你的问题,请参考以下文章

后台服务冻结/滞后 android 应用程序

即使在重启设备后如何使警报启动?

进程管理:被杀还是不被杀

Laravel 水平管理器在水平:: 终止并运行伪造守护程序后不会重新启动

Android Studios:Android 设备管理器在文件资源管理器中未显示 Nougat 7.0 的文件

在android中重新启动应用程序时如何重新连接chromecast设备