应用程序关闭时不会触发Android Alarm Manager

时间:2014-08-27 11:42:40

标签: android alarmmanager

我正在尝试设置一个警报管理器。这是我做的:

private static AlarmManager alarmManager;
private BroadcastReceiver alarmReceiver;
private PendingIntent alarmIntent;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    alarmReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
              Toast.makeText(context, "Hello", Toast.LENGTH_LONG).show();
              WakeLocker.acquire(context);

        }
    };

    registerReceiver(alarmReceiver, new IntentFilter("com.alarm.wakemeup") );
    alarmIntent = PendingIntent.getBroadcast(this, 0, new Intent("com.alarm.wakemeup"),0 );
    alarmManager = (AlarmManager)(this.getSystemService( Context.ALARM_SERVICE ));
    SetAlarm(getApplicationContext());

}

 public void SetAlarm(Context context)
 {
     alarmManager.set( AlarmManager.RTC_WAKEUP, Calendar.getInstance().getTimeInMillis() + 
             5000, alarmIntent );


 }

当我锁定屏幕时,此功能正常:手机唤醒并在5秒后在屏幕上显示烤面包。但是当我明确退出应用程序时,不会触发警报管理器。有什么建议吗?

由于

3 个答案:

答案 0 :(得分:1)

使用static receiver。您正在将接收器注册到Activity,当您的应用未运行时,它将被破坏。那么那个接收器怎么能听到你的警报呢。

因此,将接收器注册到清单中。即使您的应用未运行,它也会收听警报。

答案 1 :(得分:1)

正如我在comment中所说,您需要在清单文件中注册接收器。

即使你的申请被关闭,我也会工作。

当你在onCreate

中创建app时,你的接收器实例正在被销毁

希望这有帮助。

答案 2 :(得分:0)

这是针对下一阶段答案......

如果要在重新启动后处理服务,则需要使用WakefulIntent。在此示例代码和文档中将清除什么。

Github使用此存储库将解决您的所有问题。

我使用了这个git中的DEMO2。

Dhruti的回答是完美的。 我希望这也会有所帮助。