То, что я пытаюсь сделать, должно быть довольно простым, я звоню в IntentService, чтобы периодически проверять в фоновом режиме, если текущее время до или после в указанное время (передано как Дополнительно в намерении от MainActivity) и получать уведомление, когда это произойдет.Android, если/else конструкция всегда терпит неудачу (компилятор не может прочитать изменения)
В методе run() Thread я получаю экземпляр текущего времени и использую его в качестве сравнения с ранее указанным в конструкции if/else, прежде чем перезапустить Thread. Проблема в том, что он всегда идет «else», даже если текущее время после другого. Эта проблема слишком странная, может кто-нибудь объяснить мне, где ошибка?
Вот мой IntentService класс:
public class MyCheck extends IntentService {
int hour = 0; int minute = 0;
int i = 0;
private static final String TAG = "Check";
int hourNow;
int minuteNow;
Handler handler = new Handler();
public MyCheck() {
super(MyCheck.class.getName());
}
@Override
protected void onHandleIntent(Intent intent) {
Log.w(TAG, "Service Started!");
hour = intent.getIntExtra("hour", 0);
minute = intent.getIntExtra("minute", 0);
Log.w(TAG, "Step 1 ");
Thread runnable = new Thread() {
@Override
public void run() {
/* do what you need to do */
Log.w(TAG, "Step 2 ");
/* get current time */
Calendar c = Calendar.getInstance();
hourNow = c.get(Calendar.HOUR);
minuteNow = c.get(Calendar.MINUTE);
//HERE, IT SEEMS THAT IT'S ALWAYS BEFORE hour AND minute
if(hourNow > hour || (hourNow == hour && minuteNow > minute)) {
//SEND
Log.w(TAG, "RUN ");
Intent broadcast = new Intent();
broadcast.setAction(NOTIFICATION_SERVICE);
sendBroadcast(broadcast);
handler.removeCallbacks(this);
}
else {
//NOTHING
i++;
Log.w(TAG, "NOT YET " + i);
}
//REPEAT EVERY 6 SECONDS
try {
sleep(6000);
handler.post(this);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
runnable.start();
}
}
EDIT
Я нашел тривиальные проблемы, как вы можете увидеть в моем ответе ниже. Если кто-то хочет завершить ответ с дополнительной информацией о проблемах, которые могут возникнуть во время процесса строительства, они будут оценены. TIA
Я думаю, что проблема заключается в ценности, которую вы получаете от «Намерения». Не могли бы вы добавить журналы для регистрации 'hour',' minute', 'hourNow',' minuteNow'. Запишите их непосредственно перед оператором 'if'. Затем опубликуйте журнал здесь. – Henry
@Henry Пробовал тот же код сегодня утром и теперь работает ... Журналы показывают правильные часы и минуты ... это не первый раз, когда это происходит, я думаю, что Android Studio иногда переворачивается. Спасибо за комментарий в любом случае! – Ruffio