Android 强制停止应用程序-是否也取消其设置的所有报警?
我的应用程序正在设置警报:Android 强制停止应用程序-是否也取消其设置的所有报警?,android,Android,我的应用程序正在设置警报: AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); mgr.setRepeating( AlarmManager.RTC_WAKEUP, firstRun, interval, makePendingIntent(context)); 很好。如果我进入系统设置->应用程序,并强制停止我的应用程序,这似乎也有取消我计划的任何警报的效果。
AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
mgr.setRepeating(
AlarmManager.RTC_WAKEUP,
firstRun,
interval,
makePendingIntent(context));
很好。如果我进入系统设置->应用程序,并强制停止我的应用程序,这似乎也有取消我计划的任何警报的效果。这是真的吗?如果是这样的话,我就处于一种奇怪的情况下,我最后知道的设置是用户实际上设置了警报,但系统可能在我背后取消了,所以我现在向用户显示了错误的状态,即是否设置了警报
谢谢是的,这是真的。据我所知,你所能做的就是使你的地位正确。要检查您的警报是否仍然存在,您必须采取两个步骤:
标志创建您的PendingEvent
-如果报警已以普通方式取消,则功能CheckPendingEvent
将与MakePendingEvent
完全相同,除了PendingEvent.getBroadcast中的此标志和结果检查(当然,如果您为您的pendingent
s调用cancel()
),或者如果您的应用程序在没有强制停止的情况下崩溃(即出现未捕获的异常),pendingent.getBroadcast
将返回null
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。当您拥有DUMP时,您可以通过包名在其中标识您的报警,因此检查将被取消
boolean alarmIsSet = collectAlarmsInfo().contains(<your package name>);
布尔alarmIsSet=collectAlarmsInfo().contains();