AlarmManager不起作用

时间:2013-11-30 17:39:10

标签: java android alarmmanager

想要在闹钟管理器运行时运行函数foo(),但我还不明白我该怎么做。我看到你将一个意图传递给警报管理器,还有其他方法吗?

这是我的代码:

public void onReceive(Context context, Intent intent) 
{   
   PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
   PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
   wl.acquire();

   Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example
   Log.e(TAG, "ALARM!");
   wl.release();
   }

 public void SetAlarm()
 {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, 19);
cal.set(Calendar.MINUTE, 27);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);

 AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this, TaskOpt.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
    alarmMgr.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
}

这段代码对我不起作用,因为它没有进入onRecive ...我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,您的onReceive()需要位于名为TaskOpt的类中,即BroadcastReceiver,并在清单中注册。

其次,如果是在当地时间19:27之后,您的Calendar对象就在过去。您需要检查此项并在必要时添加一天。您可以使用 adb shell dumpsys alarm 查看已安排的警报。

第三,我建议使用WakefulBroadcastReceiver或我的WakefulIntentService,而不是直接使用WakeLock。让WakeLock正确是很棘手的,使用现有库中实现的既定模式可以更好地服务。

除此之外,检查LogCat并查看是否有任何消息,并确保实际调用SetAlarm()方法。