在我的项目中,我有一个包含年、月、日、小时、分钟的数据库。对于该数据库中的每一行,我想及时为用户提供带有标题和描述的通知,在该行中进行了描述,但是当我使用 NotificationManager 时,它会在我向数据库添加新时间时立即激活。我读了这篇文章:Alarm Manager Example,关于Alarm Manager Example,但我仍然不明白,如何将它用于通知,因为当我尝试使用时,没有任何反应。如果有人可以帮助我,我会很高兴。
问问题
2193 次
1 回答
1
你的信息我不清楚。如果您尝试在某个时间启动通知,这是一种方法。使用 2 项服务;一项服务(您可以将其称为 SetAlarmService)来读取您的数据库并设置待定意图以在特定时间使用 AlarmManager 启动。您可以通过调用 getSystemService(Context.ALARM_SERVICE); 来获取实例。您应该将待处理的意图设置为启动另一个服务(您可以将其称为 NotifyService),它会在启动后立即发出通知。
编辑:这是一个简单的示例,请参阅文档以获取参数说明等。
public class AlarmService extends Service {
Time time;
AlarmManager alarmMan;
@Override
public void onCreate() {
alarmMan = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
time = new Time();
}
@Override
public int onStartCommand(Intent intent, int startID, int flags) {
time.setToNow();
alarmMan.set(AlarmManager.RTC_WAKEUP, time.toMillis(false)+(10*1000), getPIntent());
time = null;
}
public PendingIntent getPIntent() {
Intent startIntent = new Intent(this, NotifyService.class);
startIntent.setAction(com.berrmal.remindme.NotifyService.ACTION_SEND_NOTIFICATION);
PendingIntent pIntent = PendingIntent.getService(this, 0, startIntent, PendingIntent.FLAG_CANCEL_CURRENT);
return pIntent;
}
我从一项活动中启动此服务,您可以随心所欲地进行操作。NotifyService.class 是我编写的另一个服务,它只是立即发布一个粘性通知,我不会展示它,因为听起来你已经知道如何使用 NotificationManager。这里的关键是 10*1000,即未来多少毫秒会触发警报,从而通知会在什么时间出现。您可以从文件等中读取它。在这个例子中,我只是从现在开始计算未来的 10000 毫秒。RTC_WAKEUP 标志是您想要了解的 4 个标志之一,它们使警报器做的事情略有不同。希望有帮助。
于 2013-09-08T00:11:00.957 回答