9

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

4

4 回答 4

16

要安排一个动作,你可以使用 AlarmManager

试试这个代码,它对我有用:

1 / 声明BroadcastReceiver CLASS来启动Action,这个类可以在你的activity里面或者在其他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”。

于 2012-03-29T20:37:08.907 回答
4

您必须使用 anAlarmManager来设置警报RTC_WAKEUP类型。

文档

当警报响起时,系统会广播已为其注册的 Intent, 如果目标应用程序尚未运行,则会自动启动它。已注册的警报在设备处于睡眠状态时会保留(并且如果在此期间它们响起,可以选择唤醒设备),但如果它被关闭并重新启动,则会被清除

所以这意味着:

  • 您不需要持续运行的服务来实现这一点。
  • 可能需要BroadcastListener监听 BOOT_COMPLETE 事件以在设备重启后重新注册警报。
于 2012-03-29T18:15:00.363 回答
3

您应该将应用程序创建为android 服务

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

于 2012-03-29T17:51:16.980 回答
1

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

于 2012-03-29T17:54:15.533 回答