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

前端之家收集整理的这篇文章主要介绍了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相关文章