我在我的代码中设置了一个警报,以便在特定时间内启动. 
 
警报机制适用于SDK< 19,但19日警报没有被解雇.
这是我设置闹钟的代码:
警报机制适用于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);