2012-12-11 144 views
0

在我的应用程序中,我希望每隔几分钟执行一次任务,为此我添加了一个报警管理器,以在经过的时间运行。代码很简单:android:报警任务在应用程序关闭时关闭

AlarmManager mgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    Intent i = new Intent(this, OnAlarmReceiver.class); 
    PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0); 

    mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, 
      SystemClock.elapsedRealtime() + 1000 /* Initial run in 1 second */, 
      OnBootReceiver.REPEAT_PERIOD, /* 10 minutes */ 
      pi); 
当然

我有广播接收器:

public class OnBootReceiver extends BroadcastReceiver { 
    //implementation here 
} 

我跑在我的应用程序广播(OnBootReceiver),并在主要活动这个代码,以确保我的代码运行在应用程序启动和每次启动时。

我的问题是当操作系统关闭bg应用程序。如果我去任务管理器并运行清除内存命令,我的应用程序将关闭,并且不会收到任何警报通知。

在这种情况下,我如何在我的代码中继续接收报警通知?

回答

2

如果我去任务管理器,并运行清除内存命令,我的应用程序关闭,我没有得到任何警报通知。

由于标准Android中不存在“清除内存命令”,因此只有设备制造商才能知道此功能的准确实现。

在这种情况下,我如何在我的代码中继续接收报警通知?

也许你没有。最有可能的是,设备制造商正在执行Force Stop在“设置”中执行的一些操作,包括未更改警报。您可以在“运行清除内存命令”之前和之后运行adb shell dumpsys alarm来确认此理论,以查看警报发生了什么变化。

请注意,即使在缺少“清除内存命令”的设备上,用户也可以强制停止您的设置,并取消警报。

+0

用户有停止使用应用程序的方法(关闭按钮),我需要的是确保只有用户可以关闭应用程序而不关闭操作系统。 –

+0

@ZelterAdy:你可以建立自己的移动操作系统。或者,您可以下载Android源代码,从设置中删除强制停止按钮,重建该源代码,将其转换为ROM模块,然后在任何可以使用的设备上安装该ROM模块。否则,用户可以对其设备进行最终控制,包括设备制造商提供的强制停止和任何等价物。 – CommonsWare

0

试试这个:

为您的活动,清单中的XML,放:

android:persistent="true" 

编辑:

请访问以下链接:https://groups.google.com/forum/#!topic/android-platform/nU0e3aoBlSYhttp://developer.android.com/reference/android/app/Service.html#startForeground%28int,%20android.app.Notification%29

+0

不起作用。 没有帮助。 –

+0

请看我编辑的答案。 – Shrikant

+0

谢谢 - 如果我有服务,这些链接会有所帮助,但我不知道。我尽量避免使用服务,我使用警报接收器实现了我的应用程序,然后在将其更改为服务之前,我想尝试找到一种方法将其修复到实际的表单中。 –