想要在闹钟管理器运行时运行函数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 ...我做错了什么?
谢谢!
答案 0 :(得分:0)
首先,您的onReceive()
需要位于名为TaskOpt
的类中,即BroadcastReceiver
,并在清单中注册。
其次,如果是在当地时间19:27之后,您的Calendar
对象就在过去。您需要检查此项并在必要时添加一天。您可以使用 adb shell dumpsys alarm
查看已安排的警报。
第三,我建议使用WakefulBroadcastReceiver
或我的WakefulIntentService
,而不是直接使用WakeLock
。让WakeLock
正确是很棘手的,使用现有库中实现的既定模式可以更好地服务。
除此之外,检查LogCat并查看是否有任何消息,并确保实际调用SetAlarm()
方法。