gpt4 book ai didi

android - 强制停止应用程序 - 还取消它设置的任何警报?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:18:39 25 4
gpt4 key购买 nike

我的应用正在设置闹钟:

AlarmManager mgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
mgr.setRepeating(
AlarmManager.RTC_WAKEUP,
firstRun,
interval,
makePendingIntent(context));

工作正常。如果我进入系统设置 -> 应用程序,并强制停止我的应用程序,这似乎也具有取消我安排的任何警报的效果。这是真的?如果是这样,我处于一种奇怪的情况,我最后知道的设置是用户实际上设置了警报,但系统可能已经在我背后取消了,所以我现在向用户显示错误的状态是否设置闹钟。

谢谢

最佳答案

是的,这是真的。据我所知,你所能做的就是让你的状态正确。要检查您的闹钟是否仍然存在,您必须执行 2 个步骤:

  1. 尝试使用 FLAG_NO_CREATE 创建您的 PendingIntent - 函数 checkPendingIntentmakePendingIntent 完全相同,除了这个在 PendingIntent.getBroadcast 中标记并检查结果 - 如果警报已以普通方式取消(当然,如果您为您调用 cancel() PendingIntents) 或者如果您的应用在没有强制停止的情况下崩溃(即未捕获的异常),PendingIntent.getBroadcast 将返回 null。
  2. 如果 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>);

关于android - 强制停止应用程序 - 还取消它设置的任何警报?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5434641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com