想要每 20 秒重复一次闹钟

Want to repeat alarm in every 20 seconds

AlaramManager 可以正常工作,但重复时间因设备而异

public void StartMoniterning() {
    try {
        Alarammanager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent alarmIntent = new Intent(this, AppMoniteringBroadCastReceiver.class);
        alarmIntent.putExtra("id", 1314);
        pendingIntent = PendingIntent.getBroadcast(this, 1314, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        Alarammanager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP ,
                0, 2*10000,
                pendingIntent);
        Toast.makeText(this, "Starting Monitering",
                Toast.LENGTH_LONG).show();

    } catch (Exception e) {
        e.printStackTrace();
    }
}

检查我的代码片段以取消 AlaramManager。

private void cancelAlaram() {
    try {
        Alarammanager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent i = new Intent(getBaseContext(), AppMoniteringBroadCastReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(
                getApplicationContext(), 1314, i, 0);

        Alarammanager.cancel(pendingIntent);
        pendingIntent.cancel();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

是否检查 AlaramManager 运行。

public boolean isAlaramManagerExist() {
    Intent myIntent = new Intent(HomeActivity.this, AppMoniteringBroadCastReceiver.class);
    return (PendingIntent.getBroadcast(HomeActivity.this, 1314, myIntent, PendingIntent.FLAG_NO_CREATE) != null);
}

Android 谈到可能被滥用并耗尽电池寿命的行为时,就变成了一个真正的婊子。我在错误的时间重复发出警报时遇到了很多麻烦。当它收到警报 它会在将来的适当时间再次注册相同的警报(在您的情况下是 20 秒后)。因此,它不是重复警报,而是一连串非重复警报。

我的应用程序根据 Android 版本以三种方式注册非重复警报:通过使用 AlarmManager.set() 对于低于 KitKat 的 Android 版本,它使用 AlarmManager.setExact() 对于从 Kitkat 到 Marshmallow 的任何东西,最后它使用 AlarmManager.setExactAndAllowWhileIdle() 来表示 Marshmallow 及以上。

这在大多数 Android 设备上是精确到秒的,但可能有电池优化功能(如 Doze 或其他供应商实施的功能)会干扰这一点并阻止您的应用程序接收警报。除了告诉用户如何使您的应用免于打瞌睡或其他特定于供应商的实施之外,您对此无能为力。