应用程序关闭时警报不起作用

Posted

技术标签:

【中文标题】应用程序关闭时警报不起作用【英文标题】:alarm not working when app is closed 【发布时间】:2017-06-23 14:48:07 【问题描述】:

当我使用模拟器时,警报工作正常。但是当我在实际设备上尝试时不起作用。

应用打开时的输出。

RTC #8: Alarm2c1fc9e type 1 when 1486492260454 user.com.hlthee
    tag=*alarm*:user.com.hlthee/.UpdateTables
    type=1 whenElapsed=+22h43m2s644ms when=2017-02-08 00:01:00
    window=-1 repeatInterval=86400000 count=0
    operation=PendingIntent7c4e37f: PendingIntentRecord3f5fbf4c user.com.hlthee broadcastIntent

但是当我关闭应用程序时,此条目被删除。为什么?这就是闹钟不响的原因。

警报接收器广播器清单文件。

   <receiver android:name=".UpdateTables"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
        </intent-filter>
    </receiver>

请不要说使用服务并在那里注册接收器。我想我正在清单中注册接收器,它会起作用。并且还在模拟器中正常工作时发出警报。从过去 3 天开始无法解决此问题。任何帮助都会有所帮助。

我也试过这些方法:

    使用 wakefullBroadcastReceiver 代替 BroadcastReceiver 使用 setAlarmclock 代替 setExact。

任何人也面临同样的问题。

【问题讨论】:

你在使用小米设备吗? 你在什么手机上测试它?某些品牌,例如华为,要求用户将应用添加到信任列表中 是的,我正在使用 Mi @Saveen 我在moto G 1(XT1033)上测试过 @matip 我正在使用 mi 和 moto 手机进行测试, 【参考方案1】:

如果您正在使用 MI 设备,那么您必须进行一些设置。 转到安全/权限/自动启动/ 然后选择您的应用并启用它。 希望它会奏效。

【讨论】:

【参考方案2】:

如果您正在使用该意图设置警报管理器并且您的应用被强制停止设置,则您的问题没有得到正确解释:FLAG_INCLUDE_STOPPED_PACKAGES 作为您意图中的标志... If set, this intent will always match any components in packages that are currently stopped. This is the default behavior when FLAG_EXCLUDE_STOPPED_PACKAGES is not set. If both of these flags are set, this one wins (it allows overriding of exclude for places where the framework may automatically set the exclude flag).

如果您的问题是您没有收到 BOOT_COMPLETED,这就是我的建议:

首先:在您的项目属性中,在 Manifest 选项卡下,有一个复选框列表,用于选择您要提供的权限,其中一个是 RECEIVE_BOOT_COMPLETED。检查以提供这些权限。

第二:如果您的应用安装在外部存储设备(SD 卡)上,您将永远不会收到 Boot Complete 操作。所以你必须在清单标签中指定 android:installLocation="internalOnly"。

第三:从 Android 3.1+ 版本开始,如果用户从未启动过您的应用程序至少一次或用户“强制关闭”应用程序,您不会收到 BOOT_COMPLETE。这样做是为了防止恶意软件自动注册服务。此安全漏洞已在较新版本的 Android 中关闭。

第四:在您的设备上打开一个 adb shell 并强制这样的事件进行测试: am broadcast -a android.intent.action.BOOT_COMPLETED

【讨论】:

当应用在 android 8.0 上关闭时,我的 onreceive 也没有触发,向意图添加 FLAG_INCLUDE_STOPPED_PACKAGES 标志使其工作 嗨,@dvrer 我正在开发一个警报应用程序,它工作正常,直到我的应用程序处于前台。 alarm manager not triggering the broadcast after I closed the app and cleared from recent list. 我正在测试 Android 7.1.2 你能帮我防止它吗?【参考方案3】:

执行 onTaskRemoved 和 onDestroy

@Override
public void onTaskRemoved(Intent rootIntent) 
    //Set what to do when task is removed
    super.onTaskRemoved(rootIntent);


@Override
public void onDestroy() 
    //What to do when service i destroyed
    super.onDestroy();

【讨论】:

以上是关于应用程序关闭时警报不起作用的主要内容,如果未能解决你的问题,请参考以下文章

设备锁定时警报不起作用

ios - 当 presentViewController 关闭时不起作用

Flutter 本地通知 - 当应用程序在后台运行时,ZonedSchedule 通知不起作用

phonegap javascript警报不起作用?

应用程序未运行时广播接收器不起作用

对OneSignal的严重警报支持不起作用