AlarmManager无法在Lollipop中使用Samsung设备

时间:2016-02-13 13:11:56

标签: android alarmmanager android-5.0-lollipop samsung-mobile android-5.1.1-lollipop

我开发了一个应用程序,它使用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,我总是按时收到警报,所以这让我发疯。 仅供参考,这段代码一直很好用。

我对此进行了很多研究,但遗憾的是我没有得到任何有用的信息。并不是因为他们会延迟报警(因为我已经在某些线程中读过),而且他们根本没有得到报警。所以这不是关于棒棒糖和警报管理员的已知问题。

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

2 个答案:

答案 0 :(得分:11)

你的问题(或噩梦)是Samsung Smart Manager。此应用程序自2015年起预装了所有三星手机,并且应该停用未使用的应用程序。 &#34;它如何知道哪些应用未被使用?&#34;你可能会问 - 简单:

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

所有剩余的AlarmManager条目 - 当然 - 也会被删除。您可以在他们的&#34;开发者论坛&#34;上阅读相关内容。随意关注herehere,直到这些线程被工作人员删除。我还没有看到三星的某个人回应这个话题。

&#34;修复&#34;的唯一方法这是为了向您的应用用户通知有关情况,并向他们展示如何在Smart Manager中将您的应用列入白名单。我们必须设置一个网站,其中包含分步说明,说明如何为我们的用户执行此操作。

您可以考虑设置后台服务,或者每六个小时左右调用一次AlarmManager - 这些黑客都不会起作用。

答案 1 :(得分:0)

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