我正在尝试实现一个警报,它将在每天的同一时间显示一个通知。
下面是我在活动中调用的函数:
private void restartNotify() {
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
// Intent for our BroadcastReceiver
Intent intent = new Intent(this, AlarmReceiver.class);
// PendingIntent for AlarmManager
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT );
// In case we have already set up AlarmManager, we cancel.
am.cancel(pendingIntent);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+10000, pendingIntent);
}这是我的广播接收器类
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification notification = new Notification(R.drawable.icon_notif, context.getString(R.string.NotificationLaunchMssg), System.currentTimeMillis());
// This is intent we want to launch when user clicks on the notification.
Intent intentTL = new Intent(context, MyClass.class);
notification.setLatestEventInfo(context, context.getString(R.string.NotificationTitle), context.getString(R.string.NotificationBody),
PendingIntent.getActivity(context, 0, intentTL, PendingIntent.FLAG_CANCEL_CURRENT));
nm.notify(1, notification);
//Here we set next notification, in day interval
AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+10000, pendingIntent);
}
}正如你在这段代码中看到的,我使用了一个测试值(+10000毫秒),因为我只是试图在我的应用程序启动10秒后触发警报。但是它不工作,什么也不显示。我不知道是警报出了问题,还是通知说什么都没发生。
你知道为什么吗?
谢谢你的帮忙
编辑:在AlarmReceiver方法中添加了一些测试代码后,发现这些代码从未运行过。所以我可能没有正确地调用它,有什么问题吗?
发布于 2013-03-08 00:25:03
不要使用此方法尝试setInexactRepeating(...)或setRepeating(...)而不是。为什么每次接收到意图时,你都要给BroadcastReceiver额外的工作来设置警报呢?
下面是一小段代码:
alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
0, 10000, pendingIntent);
// The pending intent will the same as yours. 10000 is the
// interval for between consecutive alarms正如azertiti在评论中提到的那样,“当它注册的时候,那个时间已经是过去了。”因此使用0或System.currentTimeMillis()。
https://stackoverflow.com/questions/15275049
复制相似问题