提问者:小点点

在Lollipop三星设备上不工作的警报管理器


我开发了一个应用程序,该应用程序使用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中的已知问题。

我感谢您的时间,欢迎任何建议!


共2个答案

匿名用户

你的问题(或噩梦)是三星智能管理器。自2015年以来,这个应用程序预装在所有三星手机上,应该会停用未使用的应用程序。“它怎么知道哪些应用程序没有被使用?”你可能会问——简单:

用户3天未启动的每个应用程序都会被停用。

当然,所有剩余的警报管理器条目也会被删除。你可以在他们的“开发者论坛”上阅读。在这些线程被工作人员删除之前,请随时关注这里或这里。我还没有看到三星的人对这个话题做出回应。

“解决”此问题的唯一方法是将情况通知您应用的用户,并向他们展示如何在智能管理器中将您的应用列入白名单。我们不得不设置一个网站,其中包含如何为我们的用户执行此操作的分步说明。

你可以考虑设置一个后台服务,或者每六个小时左右调用一次警报管理器——这些黑客都不起作用。

匿名用户

当设备重新启动时,它会清除警报,因此您的开机警报必须重新设置它们。