强制停止应用程序 - 也取消它设置的任何警报?
问题描述:
我的应用程序设置一个警报:强制停止应用程序 - 也取消它设置的任何警报?
AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
mgr.setRepeating(
AlarmManager.RTC_WAKEUP,
firstRun,
interval,
makePendingIntent(context));
工作正常。如果我进入系统设置 - >应用程序,并强制停止我的应用程序,看起来这也具有取消我预定的任何警报的效果。这是真的?如果是这样,我处于一种奇怪的情况,那就是我最后一次知道的设置是用户实际上设置了闹钟,但系统可能已经取消了我的背后,所以我现在向用户展示了错误的状态是否设置警报。
谢谢
答
是的,的确如此。就我所知,你所能做的就是让你的状态正确。要检查您的警报仍然存在,你必须采取两个步骤:
- Atempt创建您
PendingIntent
与FLAG_NO_CREATE
- 功能checkPendingIntent
会完全一样,除了这个标志makePendingIntent
在PendingIntent.getBroadcast
和结果的检查 - 如果报警已被以普通方式取消(当然,如果您为您的PendingIntent
s调用cancel()
),或者如果您的应用在没有强制停止的情况下崩溃(例如未捕获的异常),则PendingIntent.getBroadcast
将返回null。 -
如果PendingIntent存在,则可能会设置警报。要检查它,你必须转储关于所有警报的系统信息并在那里搜索你的。要转储信息,您必须致电
String collectAlarmsInfo() { StringBuilder result = new StringBuilder(); try { Process process = Runtime.getRuntime().exec("dumpsys alarm"); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = bufferedReader.readLine()) != null) { result.append(line); result.append("\n"); } } catch (IOException e) { Log.e(TAG, "Could not retrieve data", e); } return result.toString(); }
要使用dumpsys,您需要拥有用户权限DUMP。当你有转储你可以找出你在它的报警由你包的名字,所以检查将
boolean alarmIsSet = collectAlarmsInfo().contains(<your package name>);