Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何跟踪胭脂报警器?_Java_Android_Alarmmanager_Jodatime_Android Alarms - Fatal编程技术网

Java 如何跟踪胭脂报警器?

Java 如何跟踪胭脂报警器?,java,android,alarmmanager,jodatime,android-alarms,Java,Android,Alarmmanager,Jodatime,Android Alarms,我有一个Android版本的应用程序,每天在特定的时间(例如晚上10:00)通知用户。我没有使用setRepeating,因为在21岁以上的高级API上不建议使用它。下面是我用来重置警报的伪代码 AlarmController (set alarm) Once time was met send to alarm receiver Alarm receiver would call the Alarm Controller and Increase the day by 1 and set it

我有一个Android版本的应用程序,每天在特定的时间(例如晚上10:00)通知用户。我没有使用setRepeating,因为在21岁以上的高级API上不建议使用它。下面是我用来重置警报的伪代码

AlarmController (set alarm)
Once time was met send to alarm receiver
Alarm receiver would call the Alarm Controller and Increase the day by 1 and set it again 
At the same time Alarm receiver will fire up the Intentservice for notification and set notified **true** in DataBase
理论上,这应该是可行的。我在这里使用Joda时间轻松增加1天。但问题是,通知一直在随机启动,有时会在最后一次启动后启动6次,或者通常每1小时或30分钟启动一次。我不明白。现在我提供的伪代码是基本的。在我的真实代码中,我有两个报警,一个用于启动通知并将通知设置为true,另一个是在日变后将通知重置为false

我的应用程序已经发布。我从来没有想到会发生这种情况,因为我在genymotion上调试它的方式是手动移动时间,一切似乎都正常工作。我不得不在fabric IO上启动一个日志,但似乎只有在出现错误时才会显示日志。任何人,谢谢

下面是我使用的最基本的代码:

报警控制器

public static void setAdaptiveReminder(Context context, long ALARM_ID, DateTime dateTime, boolean shouldsetAlarm) {
        Intent myIntent = new Intent(context, AdaptiveReminderReceiver.class);
        myIntent.putExtra("reminder", shouldsetAlarm);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, (int) ALARM_ID, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        ALARMMANAGER = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Log.d(TAG, "setAdaptiveReminder: " + dateTime.toLocalTime().toString() + "  " + dateTime.toLocalDate().toString());

        CrashUtility.LogErrorReportToFabric(TAG + " setAdaptiveReminder", dateTime.toLocalTime().toString() + " " + dateTime.toLocalDate().toString());

        if (Utility.GetBuildVersion() >= 19 && Utility.GetBuildVersion() < 23) { // if lollipop
            //ALARMMANAGER.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis() + 5000,1000,pendingIntent);

            ALARMMANAGER.setExact(AlarmManager.RTC_WAKEUP, dateTime.toDate().getTime(), pendingIntent);
            //ALARMMANAGER.setRepeating(AlarmManager.RTC_WAKEUP,dateTime.toDate().getTime(), AlarmManager.INTERVAL_DAY,pendingIntent);

        } else if (Utility.GetBuildVersion() >= 23 || Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            //Log.d(TAG, "setTimeSinceLastUseReminder:  android M and UP");
            ALARMMANAGER.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, dateTime.toDate().getTime(), pendingIntent);
            //ALARMMANAGER.setrep(AlarmManager.RTC_WAKEUP,dateTime.toDate().getTime(), AlarmManager.INTERVAL_DAY,pendingIntent);
        }
}
public void setAdaptiveReminder() {
        //AlarmController.setAdaptiveReminder(context,778,d);

        DateTime dateTime = TimeUtility.SetCorrectTimeInCorrectDate(settingsRepository.getAdaptiveReminderTime());
        boolean isNotified = settingsRepository.isNotifiedReminder();

        //Toast.makeText(context, "" + dateTime.toLocalTime().toString(), Toast.LENGTH_SHORT).show();

        Log.d(TAG, "setAdaptiveReminder: gggfss " + TimeUtility.DateIsToday(dateTime) + "  " + dateTime.toLocalTime().toString());
        Log.d(TAG, "setAdaptiveReminder: " + isNotified);
        if (TimeUtility.DateIsToday(dateTime) && !isNotified) {
            dateTime = dateTime.plusDays(1);
            CrashUtility.LogErrorReportToFabric(TAG + " setAdaptiveReminder", dateTime.toLocalTime().toString() + " " + dateTime.toLocalDate().toString());
            AlarmController.setAdaptiveReminder(context, 778, dateTime, true);
            Log.d(TAG, "setAdaptiveReminder:  " + dateTime.toLocalDate() + "   " + dateTime.toLocalTime().toString());
        }
}
public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.

        this.context = context;

        alarmControllerPresenter = new AlarmControllerPresenter(context,settingsRepository,habitRepository);
        alarmControllerPresenter.setAdaptiveReminder();

}
接收器

public static void setAdaptiveReminder(Context context, long ALARM_ID, DateTime dateTime, boolean shouldsetAlarm) {
        Intent myIntent = new Intent(context, AdaptiveReminderReceiver.class);
        myIntent.putExtra("reminder", shouldsetAlarm);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, (int) ALARM_ID, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        ALARMMANAGER = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        Log.d(TAG, "setAdaptiveReminder: " + dateTime.toLocalTime().toString() + "  " + dateTime.toLocalDate().toString());

        CrashUtility.LogErrorReportToFabric(TAG + " setAdaptiveReminder", dateTime.toLocalTime().toString() + " " + dateTime.toLocalDate().toString());

        if (Utility.GetBuildVersion() >= 19 && Utility.GetBuildVersion() < 23) { // if lollipop
            //ALARMMANAGER.setRepeating(AlarmManager.RTC_WAKEUP,System.currentTimeMillis() + 5000,1000,pendingIntent);

            ALARMMANAGER.setExact(AlarmManager.RTC_WAKEUP, dateTime.toDate().getTime(), pendingIntent);
            //ALARMMANAGER.setRepeating(AlarmManager.RTC_WAKEUP,dateTime.toDate().getTime(), AlarmManager.INTERVAL_DAY,pendingIntent);

        } else if (Utility.GetBuildVersion() >= 23 || Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            //Log.d(TAG, "setTimeSinceLastUseReminder:  android M and UP");
            ALARMMANAGER.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, dateTime.toDate().getTime(), pendingIntent);
            //ALARMMANAGER.setrep(AlarmManager.RTC_WAKEUP,dateTime.toDate().getTime(), AlarmManager.INTERVAL_DAY,pendingIntent);
        }
}
public void setAdaptiveReminder() {
        //AlarmController.setAdaptiveReminder(context,778,d);

        DateTime dateTime = TimeUtility.SetCorrectTimeInCorrectDate(settingsRepository.getAdaptiveReminderTime());
        boolean isNotified = settingsRepository.isNotifiedReminder();

        //Toast.makeText(context, "" + dateTime.toLocalTime().toString(), Toast.LENGTH_SHORT).show();

        Log.d(TAG, "setAdaptiveReminder: gggfss " + TimeUtility.DateIsToday(dateTime) + "  " + dateTime.toLocalTime().toString());
        Log.d(TAG, "setAdaptiveReminder: " + isNotified);
        if (TimeUtility.DateIsToday(dateTime) && !isNotified) {
            dateTime = dateTime.plusDays(1);
            CrashUtility.LogErrorReportToFabric(TAG + " setAdaptiveReminder", dateTime.toLocalTime().toString() + " " + dateTime.toLocalDate().toString());
            AlarmController.setAdaptiveReminder(context, 778, dateTime, true);
            Log.d(TAG, "setAdaptiveReminder:  " + dateTime.toLocalDate() + "   " + dateTime.toLocalTime().toString());
        }
}
public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.

        this.context = context;

        alarmControllerPresenter = new AlarmControllerPresenter(context,settingsRepository,habitRepository);
        alarmControllerPresenter.setAdaptiveReminder();

}

所以我提供的代码与我每天设置闹钟时使用的代码完全相同。我只是做了一些清理,就这样。

如果您每次都重置下一个警报,并且下一次出现问题,那么您可能需要使用您的代码而不是伪代码。特别是如果你是在1小时后而不是1天收到警报…好的,我会尝试清理我的代码并发布它。检查如何提供第一个警报。您好,我已经添加了我的代码