Сценарий:
Работники производственной линии проводят проверки через определенные промежутки времени. В моем приложении пользователь вводит этот интервал времени в текстовое поле. Есть дата и время выбора, так что пользователь может выбрать, когда процесс начался. Я пытаюсь включить будильник за 5 минут до следующей проверки.
Например:
Процесс начинается в 2.30. Пользователь вошел с интервалом в 20 минут. Поэтому следующая проверка должна быть в 2,50. Тревога должна звучать в 2.45. Затем этот процесс повторится, поэтому следующая проверка будет 3.10, а сигнал тревоги должен прозвучать в 3.05.
Вот код, который у меня есть:
MainActivity.calculate();
commencedTime = new Date();
mTime = Calendar.getInstance();
mTime.setTime(alarmTime);
timeCommenced = trimSecsAndMillisecs(mTime).getTimeInMillis();
currentTime = new Date();
currentTime.getTime();
alertDialogBuilder = new AlertDialog.Builder(MainActivity.this);
//set alert
alertDialogBuilder
.setTitle("IP Check frequency: " + time.getText() + " minutes")
.setMessage("Processing commenced at \n" + startTime.getText())
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (currentTime.after(alarmTime)) {
Toast.makeText(MainActivity.this, "Missed first alert", Toast.LENGTH_LONG).show();
}
i = Integer.parseInt(time.getText().toString());
long scTime2 = ((i * 60 * 1000)); //TIME ENTERED IN MILLISECONDS
intent1 = new Intent(MainActivity.this, MyBroadcastReceiver.class);
intent1.putExtra("timeEntered", scTime2);
intent1.putExtra("timeCommenced", timeCommenced);
sendBroadcast(intent1);
pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
manager.setExact(AlarmManager.RTC_WAKEUP, timeCommenced, pendingIntent);
Toast.makeText(MainActivity.this, "Alert Set", Toast.LENGTH_SHORT).show();
stopped.setVisibility(View.VISIBLE);
commenced1.setVisibility(View.GONE);
//Change editText to TextView
time.setVisibility(View.GONE);
timeText.setVisibility(View.VISIBLE);
timeText.setText(time.getText().toString());
processingText.setText(R.string.processing_commenced);
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
}
Приемник вещания:
@Override
public void onReceive(Context context, Intent intent) {
// Vibrate the mobile phone
vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
long[] pattern = {0, 10000, 3, 10000};
vibrator.vibrate(pattern, -1); // vibration for 20 seconds
//create as instance of the media player
mediaPlayer = MediaPlayer.create(context, R.raw.alarm_sound);
mediaPlayer.start();
createNotification(context, "AlmaIPC", "IP check is due", "Alert");
AlarmManager manager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
Intent intent2 = new Intent(context, MainActivity.class);
PendingIntent pi2 = PendingIntent.getActivity(context, 0, intent2, 0);
Long timeEntered =intent.getLongExtra("timeEntered", 0);
AlarmManager.AlarmClockInfo ac=
new AlarmManager.AlarmClockInfo(System.currentTimeMillis() + timeEntered,
pi2);
manager.setAlarmClock(ac, pi);
}
переменная timecommenced
, которая есть в моих параметрах setExact (), правильно отлаживается, в какое время она должна активировать тревогу.
Внутри моего широковещательного приемника я пытаюсь пропустить это значение и добавить интервал, который ввел пользователь, который будет поддерживать тактирование будильника в такте. например 2,45, затем 3,05.
По какой-то причине я нажимаю «Обработка началась» вместо звукового сигнала тревоги, когда timecommenced
сообщает, что он срабатывает сразу. Затем, после этого, время срабатывания будильника полностью отключилось, и у него появился собственный разум.
Может кто-нибудь увидеть что-то, что я делаю неправильно или дать мне какой-нибудь совет?
Спасибо!