我开发了一个应用程序,它使用AlarmManager来设置需要在一年中的某个特定时间触发的群警报(通常大约50个)。 这是我使用的代码,因为4.4 kitkat更改了AlarmManager。
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.1安卓版)得到不好的评论,根本没有得到他们的本地通知。我的意思是,它没有触发警报,似乎设备跳过它或没有唤醒。
在测试中,主要是使用带有5.0.1的三星S4,我总是按时收到警报,所以这让我发疯。 仅供参考,这段代码一直很好用。
我对此进行了很多研究,但遗憾的是我没有得到任何有用的信息。并不是因为他们会延迟报警(因为我已经在某些线程中读过),而且他们根本没有得到报警。所以这不是关于棒棒糖和警报管理员的已知问题。
感谢您的时间,欢迎任何建议!
答案 0 :(得分:11)
你的问题(或噩梦)是Samsung Smart Manager。此应用程序自2015年起预装了所有三星手机,并且应该停用未使用的应用程序。 &#34;它如何知道哪些应用未被使用?&#34;你可能会问 - 简单:
用户3天未启动的每个应用都会停用。
所有剩余的AlarmManager条目 - 当然 - 也会被删除。您可以在他们的&#34;开发者论坛&#34;上阅读相关内容。随意关注here或here,直到这些线程被工作人员删除。我还没有看到三星的某个人回应这个话题。
&#34;修复&#34;的唯一方法这是为了向您的应用用户通知有关情况,并向他们展示如何在Smart Manager中将您的应用列入白名单。我们必须设置一个网站,其中包含分步说明,说明如何为我们的用户执行此操作。
您可以考虑设置后台服务,或者每六个小时左右调用一次AlarmManager - 这些黑客都不会起作用。
答案 1 :(得分:0)
当设备重新启动时,它会清除警报,因此您必须重新设置启动警报。