我开发了一个应用程序,该应用程序使用HurmManager来设置一堆需要在一年中的某个时间触发的警报(通常在50个左右)。这是我自4.4 kitkat更改HurmManager以来使用的代码。
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
long setDate = fireDate.getTime(); // it's a calendar date defined above
Intent intent = new Intent(LOCAL_DISPLAY_MESSAGE_ACTION);
PendingIntent pending = PendingIntent.getBroadcast(ctx,
id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
if (Build.VERSION.RELEASE.startsWith("6")) {
am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, setDate, pending);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
am.setExact(AlarmManager.RTC_WAKEUP, setDate, pending);
} else {
am.set(AlarmManager.RTC_WAKEUP, setDate, pending);
}
除了上面的代码之外,我还使用了清单中正确定义的广播接收器。
public class LocalReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
PushWakeLocker.acquire(context);
// do some stuff
PushWakeLocker.release();
}
}
更多可能有帮助的信息。
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="19" />
几个月前,我收到的差评只有三星设备(5.0 /5.1Android版本),根本没有得到本地通知。我的意思是,它没有触发警报,似乎设备跳过它或没有唤醒。
在测试中,主要是使用5.0.1的三星S4,我总是按时收到警报,所以这让我发疯。FYI这段代码一直运行得很好。
我对此研究了很多,但不幸的是,我没有得到有用的信息。不是他们延迟收到警报(正如我在一些线程中读到的),而是他们根本没有得到它。所以这不是关于Lollipop和alarmmanager中的已知问题。
我感谢您的时间,欢迎任何建议!
你的问题(或噩梦)是三星智能管理器。自2015年以来,这个应用程序预装在所有三星手机上,应该会停用未使用的应用程序。“它怎么知道哪些应用程序没有被使用?”你可能会问——简单:
用户3天未启动的每个应用程序都会被停用。
当然,所有剩余的警报管理器条目也会被删除。你可以在他们的“开发者论坛”上阅读。在这些线程被工作人员删除之前,请随时关注这里或这里。我还没有看到三星的人对这个话题做出回应。
“解决”此问题的唯一方法是将情况通知您应用的用户,并向他们展示如何在智能管理器中将您的应用列入白名单。我们不得不设置一个网站,其中包含如何为我们的用户执行此操作的分步说明。
你可以考虑设置一个后台服务,或者每六个小时左右调用一次警报管理器——这些黑客都不起作用。
当设备重新启动时,它会清除警报,因此您的开机警报必须重新设置它们。