我必须创建一个应用程序,我必须在其中设置一个日期,并且在该特定日期的 9 点钟,我必须发出通知。最简单的方法是什么?即使应用程序被杀死,我也希望该应用程序能够正常工作。AlarmManager 是一个解决方案吗?
4 回答
要安排一个动作,你可以使用 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”。
您必须使用 anAlarmManager
来设置警报RTC_WAKEUP
类型。
从文档:
当警报响起时,系统会广播已为其注册的 Intent, 如果目标应用程序尚未运行,则会自动启动它。已注册的警报在设备处于睡眠状态时会保留(并且如果在此期间它们响起,可以选择唤醒设备),但如果它被关闭并重新启动,则会被清除。
所以这意味着:
- 您不需要持续运行的服务来实现这一点。
- 可能需要
BroadcastListener
监听 BOOT_COMPLETE 事件以在设备重启后重新注册警报。
您应该将应用程序创建为android 服务。
Service 是一个应用程序组件,可以在后台执行长时间运行的操作,并且不提供用户界面。另一个应用程序组件可以启动一个服务,即使用户切换到另一个应用程序,它也会继续在后台运行。此外,组件可以绑定到服务以与其交互,甚至执行进程间通信 (IPC)。例如,服务可能会在后台处理网络事务、播放音乐、执行文件 I/O 或与内容提供者交互。
警报管理器是我猜的解决方案。您应该将警报管理器设置为特定时间,然后使其在启动时调用通知。这应该在服务中实现。我希望它有所帮助。