Android Oreo:应用程序未运行时不会触发警报
我有一个相对简单的设置,可以在一天中的特定时间触发警报并向用户显示通知。这是相关代码 设置报警Android Oreo:应用程序未运行时不会触发警报,android,android-alarms,android-8.0-oreo,Android,Android Alarms,Android 8.0 Oreo,我有一个相对简单的设置,可以在一天中的特定时间触发警报并向用户显示通知。这是相关代码 设置报警 long inTime = /*expirationTime*/ Calendar.getInstance().getTimeInMillis() + 10000; Intent startIntent = new Intent("parking.event"); startIntent.setClass(getBaseContext(), ParkingExpirationWarmingBro
long inTime = /*expirationTime*/ Calendar.getInstance().getTimeInMillis() + 10000;
Intent startIntent = new Intent("parking.event");
startIntent.setClass(getBaseContext(), ParkingExpirationWarmingBroadcast.class);
PendingIntent startPendingIntent = PendingIntent.getBroadcast(this, 99, startIntent, 0);
alarmMgr.setExact(AlarmManager.RTC_WAKEUP,
inTime,
startPendingIntent);
广播接收机已注册
<receiver
android:name=".modules.parking.ParkingExpirationWarmingBroadcast"
android:enabled="true">
<intent-filter>
<action android:name="parking.event" />
</intent-filter>
</receiver>
只有当应用程序位于后台时,才会触发接收器。当我从多任务中滑动应用程序时,通知将被清除,并且不会触发新的警报。我在Android 7.0上检查了这个设置,无论应用程序是否运行,都会触发BroadcastReceiver
我知道Android Oreo对隐式广播的限制,但我不认为我上面提到的意图是隐式的
有人能指出我做错了什么吗 这是任何
Android
版本的一般行为。如果您强制退出应用程序,则其报警
和挂起内容
也将被删除
您可以找到相同的答案。强制关闭应用程序会破坏其组件。这就是强制停止的作用。这不是一个bug,而是一个特性。遵循下面的思路,android框架工程师已经讨论过了。
我的理解是,通过多任务处理杀死应用程序与强制停止应用程序不同。另外,这项工作与7.0上的预期一样。即使我因多任务而关闭应用程序,也会触发警报。@Ankit在许多设备上,从
最近的任务
中滑动应用程序与强制退出
相同。您可能正在其中一台设备上测试您的应用程序。我正在OnePlus 3T上测试。默认的报警应用程序似乎工作正常,即使我杀了它。让我找另一个有Oreo的设备。好吧,如果你读了这个问题,我没有明确地强制应用程序退出设置。我刚刚从最近的应用程序中删除了它(通过按下多任务按钮并向左/向右滑动)。正如Marko Pacak在上面的回答中提到的,一些装置确实认为这是一种力量。我做了一点测试,问题只出现在OnePlus设备上。其他应用程序都没有预期的表现。calendar不会触发事件,或者google keep不会在最近的应用程序中设置弹出提醒。请尝试用setExactAndAllowHileId()方法替换setExact()。文档中指定,当设备进入睡眠模式时,旧方法setExact()不起作用,我认为这就是您的情况。点击这个链接
class ParkingExpirationWarmingBroadcast : BroadcastReceiver() {
@SuppressLint("NewApi")
override fun onReceive(context: Context, intent: Intent) {
}
}