簡體   English   中英

我的 AlarmManager 可以在達到設定時間時觸發第一個警報,而不是在第一次重復之后嗎?

[英]Can my AlarmManager fire the first alarm, when the set time is reached, not after the first repeating?

對於我的應用程序,我想在午夜和每隔一個午夜定期發出警報以重置一些變量。 我嘗試了警報管理器來實現這一點。 警報是否有可能在它第一次到達午夜時觸發,而不僅僅是在接下來的午夜? 我的實際代碼正在運行,但不是我想要實現的。 我現在將時間和重復時間設置為 60 秒以進行測試。

在我的日志輸出中,我得到例如:

  • 20.01.2020_14:15:00我想要一個警報
  • 20.01.2020_14:16:00:警報
  • 20.01.2020_14:17:00:警報

那么是否可以在到達設定時間的第一時間直接觸發警報? 或者有人有解決方法或任何提示或提示我如何實現嗎?

我設置鬧鍾的功能

public void midnightAlarm() {
 AlarmManager alarmMgr;
        PendingIntent alarmIntent;

        alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(this, MidnightAlarmReceiver.class);
        alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);


        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, 15);
        calendar.set(Calendar.MINUTE, 15);


        alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                1000 * 60 , alarmIntent);

    }

我的接收者類:

public class MidnightAlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

           writeToFile("ALARM");
           //reset my Variables

    }
}

public void midnightAlarm() {

         AlarmManager alarmMgr;
         PendingIntent alarmIntent;

        alarmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(this, MidnightAlarmReceiver.class);
        alarmIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);


        // Set the alarm to start at 8:30 a.m.
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, 23);
        calendar.set(Calendar.MINUTE, 59);
        calendar.set(Calendar.SECOND, 59);



        alarmMgr.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), alarmIntent);


    }

接收者

public class MidnightAlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

           GlobalVariables.writeToFile("ALARM");
           midnightAlarmREDO(context);
    }



    public void midnightAlarmREDO(Context context) {

        AlarmManager alarmMgr;
        PendingIntent alarmIntent;

        alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
        Intent intent = new Intent(context, MidnightAlarmReceiver.class);
        alarmIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

// zeit neu berechnen

        alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                SystemClock.elapsedRealtime() +
                        60 * 1000, alarmIntent);


    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM