特定日期的Android通知

时间:2012-03-29 17:49:40

标签: android alarmmanager android-notifications android-date

我必须创建一个应用程序,我必须在其中设置日期,并且在特定日期9点钟,我必须发出通知。这样做最简单的方法是什么?即使应用程序被杀,我希望应用程序能够正常运行。 AlarmManager是解决方案吗?

4 个答案:

答案 0 :(得分:15)

要安排操作,您可以使用AlarmManager

试试这段代码对我有用:

1 /声明BroadcastReceiver CLASS启动Action,这个类可以在你的活动里面或在其他java文件外面

public class Receiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Toast.makeText(context, intent.getStringExtra("param"),Toast.LENGTH_SHORT).show();
    }

}

2 /在您的Oncreate方法中放置此代码

AlarmManager alarms = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);

    Receiver receiver = new Receiver();
    IntentFilter filter = new IntentFilter("ALARM_ACTION");
    registerReceiver(receiver, filter);

    Intent intent = new Intent("ALARM_ACTION");
    intent.putExtra("param", "My scheduled action");
    PendingIntent operation = PendingIntent.getBroadcast(this, 0, intent, 0);
    // I choose 3s after the launch of my application
    alarms.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+3000, operation) ;   

启动你的应用程序3秒后会出现Toast,所以你可以用你的唤醒时间更改“System.currentTimeMillis()+ 3000”。

答案 1 :(得分:4)

您必须使用AlarmManager设置RTC_WAKEUP类型的闹钟。

来自docs

  

当闹钟响起时,已注册的意图是   由系统广播,自动启动目标应用程序   如果它还没有运行注册的警报保留在   设备处于休眠状态(并且可以选择唤醒设备,如果它们熄灭   在此期间),但如果关闭则会被清除   重新启动

所以这意味着:

  • 您无需持续运行服务即可实现此目标。
  • 可能需要一个监听BOOT_COMPLETE的BroadcastListener 在设备重启后重新注册警报的事件。

答案 2 :(得分:3)

您应该将应用程序创建为android service

  

服务是一个可以执行长时间运行的应用程序组件   在后台运行并且不提供用户界面。   另一个应用程序组件可以启动服务,它将继续   即使用户切换到另一个用户,也要在后台运行   应用。此外,组件可以绑定到服务   与之交互甚至执行进程间通信(IPC)。   例如,服务可能处理网络事务,播放音乐,   从中执行文件I / O或与内容提供商进行交互   背景

答案 3 :(得分:1)

警报管理器是我猜的解决方案。您应该将警报管理器设置为特定时间,然后在其启动时调用通知。这应该在服务中实现。我希望它有所帮助。