1

在我的项目中,我有一个包含年、月、日、小时、分钟的数据库。对于该数据库中的每一行,我想及时为用户提供带有标题和描述的通知,在该行中进行了描述,但是当我使用 NotificationManager 时,它会在我向数据库添加新时间时立即激活。我读了这篇文章:Alarm Manager Example,关于Alarm Manager Example,但我仍然不明白,如何将它用于通知,因为当我尝试使用时,没有任何反应。如果有人可以帮助我,我会很高兴。

4

1 回答 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 回答