2012-03-29 81 views
9

我必须做一个应用程序,我必须在该应用程序中设置日期,并在9点的特定日期,我必须通知您。最简单的方法是什么?(即使我重新启动手机,或取出电池,我也希望应用程序正常工作。)AlarmManager是一种解决方案吗?在特定日期的Android通知

+12

你怎么能期望android没有电池工作? :) – waqaslam 2012-03-29 17:51:47

+0

我的意思是,我仍然可以得到该通知,而无需再次访问该应用程序 – user1253236 2012-03-29 18:19:01

+0

OP显然意味着如果他/她取出电池并将其替换。 – 2015-07-09 07:33:32

回答

15

要安排你可以使用AlarmManager

试试这个代码,它是为我工作的行动:

1 /声明的BroadcastReceiver类启动动作,这个类可以是你的活动中或在其他的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) ; 

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

+0

完美的作品。这应该被接受为答案。 – user1531978 2013-12-16 12:54:04

3

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

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

1

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

+0

不,它没有,但无论如何谢谢 – user1253236 2012-04-03 11:43:07

4

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

docs

当警报响起时,已被注册,因为这是 通过系统广播的意图,自动启动目标程序 如果它尚未运行。而 设备处于睡眠状态(并且可任选唤醒设备,如果他们在这段时间内熄灭 ),但如果它被关闭并重新启动 将清除已注册的警报都将保留。

因此,这意味着:

  • 你并不需要一个持续运行的服务,以实现这一目标。
  • 可能需要一个监听BOOT_COMPLETE 事件的BroadcastListener以在设备重启后重新注册警报。