AlarmManager在Android 4.4.2中停止工作(使用SetExact())

我在我的代码中设置了一个警报,以便在特定时间内启动.
警报机制适用于SDK< 19,但19日警报没有被解雇.
这是我设置闹钟的代码
public void SetAlarm(Context context,Long executionTime)
{

    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context,AlarmReciever.class);
    PendingIntent pi = PendingIntent.getbroadcast(context,intent,PendingIntent.FLAG_UPDATE_CURRENT);
    // Only one alarm can live,so cancel prevIoUs.
    am.cancel(pi);
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
        am.set(AlarmManager.RTC_WAKEUP,executionTime,pi);
    } else {
        setAlarmFromKitkat(am,pi);
    }
}

由于我使用服务设置警报,因此我使用GetApplicationContext()作为上下文.

onReceive()代码

@Override
public void onReceive(Context context,Intent intent) {
    for (SchedulerListener listener : listeners) {
        listener.fetchAndRebuildNotification();
    }
}

这是broadcastReceiver的声明:

<receiver 
        android:name="com.SagiL.myAppName.broadCastReceivers.AlarmReciever" />

回调在服务中运行一个方法(当警报发生时它仍处于活动状态,注意它不会启动它).

整个事情是在我的应用程序中使用的库,在那里我以相同的方式声明接收器.

有时警报会发射一次,但大多数情况下它根本不发射.

有没有人经历过这样的事情?
我不敢相信SDK 19很常见,因为很多应用程序都在使用AlarmManager,如果它很常见,它们也会破坏.

解决方法

我的申请遇到了类似的问题.我发现在getbroadcast(…)中使用0和id;工作得不好,造成了很多问题.

尝试将id从0更改为警报的真实ID.

从:

PendingIntent pi = PendingIntent.getbroadcast(context,PendingIntent.FLAG_UPDATE_CURRENT);

至:

PendingIntent pi = PendingIntent.getbroadcast(context,id,PendingIntent.FLAG_UPDATE_CURRENT);

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...