В андроиде я должен установить будильник в специальный час, который будет звонить и открывать действие в нужное время суток.Android: setAlarmManager (...) открывает активность вместо задержки открытия
Моя проблема заключается в том, что функция «alarmManager.set (...)» ОТКРЫЛАСЬ НЕСТАНДАРТНО целевую деятельность и, когда время достигнуто, снова открыть ту же самую деятельность.
Я не понимаю, почему это происходит, как я могу его исправить?
Текущее состояние: У меня есть timepicker, который помогает мне выбрать время. У меня также есть кнопка, вызывающая функцию alarmManager.set(), когда я нажимаю на нее, получая время от timepicker и вычисляя следующий сигнал тревоги в мс.
Thx
Код кнопки:
public void setTheAlarm(View view) {
TimePicker tp_clock = (TimePicker) findViewById(R.id.tp_timeToRing);
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
int alarmHours = tp_clock.getCurrentHour();
int alarmMinutes = tp_clock.getCurrentMinute();
Toast.makeText(this, "Alarm set for " + alarmHours + "h" + alarmMinutes, Toast.LENGTH_LONG).show();
Long time = calculateTime(alarmHours, alarmMinutes);
alarmManager.set(AlarmManager.RTC_WAKEUP,time, PendingIntent.getBroadcast(this, 1, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));
}
Код функции calculateTime:
public Long calculateTime(int alarmHours, int alarmMinutes) {
Calendar c = Calendar.getInstance();
int currentHours = c.get(Calendar.HOUR);
if (c.get(Calendar.AM_PM) == 1)
currentHours +=12;
int currentMinutes = c.get(Calendar.MINUTE);
int setAlarmHours = 0;
int setAlarmMinutes = 0;
int balanceWithMinute = 0;
if (alarmMinutes >= currentMinutes) {
setAlarmMinutes = alarmMinutes - currentMinutes;
}
else {
setAlarmMinutes = (60 - currentMinutes) + alarmMinutes;
balanceWithMinute = 1;
}
if (alarmHours > currentHours)
setAlarmHours = alarmHours - currentHours;
if (alarmHours < currentHours)
setAlarmHours = (24 - currentHours) +alarmHours - balanceWithMinute;
if (alarmHours == currentHours && balanceWithMinute == 1)
setAlarmHours = 23;
Long time = new GregorianCalendar().getTimeInMillis()+setAlarmHours*setAlarmMinutes*60*1000;
return time;
}
кодекса alarmManager:
package fr.pixelcraft.victor.wackertest.SoundPackage;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
import fr.pixelcraft.victor.wackertest.LoginActivity;
public class AlarmReciever extends BroadcastReceiver {
private String userToken;
private String userId;
@Override
public void onReceive(Context context, Intent intent) {
Intent i=new Intent(context, PlanASoundActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
userToken = intent.getStringExtra(LoginActivity.USER_TOKEN);
userId = intent.getStringExtra(LoginActivity.USER_ID);
i.putExtra(LoginActivity.USER_TOKEN, userToken);
i.putExtra(LoginActivity.USER_ID, userId);
context.startActivity(i);
Toast.makeText(context, "Alarm triggered", Toast.LENGTH_LONG).show();
}
}
Возможно, вы установили время, которое уже ** прошло **. Это немедленно срабатывает в AlarmManager ** **. –
Вы правы! Я должен переработать свою функцию calculateTime. Спасибо ! Опубликовать решение, я проверю его. – ReyalS