Я пытаюсь использовать alarmManager и pendingIntent, чтобы мои пользователи могли установить время, в течение которого в моем приложении произойдет определенное событие. Однако BroadcastReceiver запускается в конце события onClick, а не в указанное время, которое я только что установил. Это должно быть просто, но я этого не вижу. Код ниже.AlarmManager с ожидающимIntent: заданное время не регистрируется должным образом
public class MainActivity extends Activity implements View.OnClickListener {
PendingIntent pendingIntent;
BroadcastReceiver broadcastReceiver;
AlarmManager alarmManager;
TextView tvHours, tvMins;
int iHours = 23;
int iMins = 15;
int iSecs = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initiateBroadcastReceiver();
findViewById(R.id.the_button).setOnClickListener(this);
tvHours = (TextView) findViewById(R.id.Hours);
String szHours = Integer.toString(iHours);
tvHours.setText(szHours);
tvMins = (TextView) findViewById(R.id.Mins);
String szMins = Integer.toString(iMins);
tvMins.setText(szMins);
}
private void initiateBroadcastReceiver() {
broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(MainActivity.this, "This is the alarm event!", Toast.LENGTH_LONG).show();
}
};
registerReceiver(broadcastReceiver, new IntentFilter("pending event"));
pendingIntent = PendingIntent.getBroadcast(this, 0, new Intent("pending event"), 0);
//PendingIntent alarmIntent = PendingIntent.getBroadcast(context, 0, activate, 0);
alarmManager = (AlarmManager)(this.getSystemService(Context.ALARM_SERVICE));
}
@Override
public void onClick(View v) {
String szHours=tvHours.getText().toString();
int iHourTemp = Integer.parseInt(szHours);
if (iHourTemp < 24){
iHours = iHourTemp;
}else{
Toast.makeText(MainActivity.this, "Please enter an hour value between 0 and 23.", Toast.LENGTH_LONG).show();
}
String szMins=tvMins.getText().toString();
int iMinTemp = Integer.parseInt(szMins);
if (iMinTemp < 60){
iMins = iMinTemp;
}else{
Toast.makeText(MainActivity.this, "Please enter an minute value between 0 and 60.", Toast.LENGTH_LONG).show();
}
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, iHours);
cal.set(Calendar.MINUTE, iMins);
cal.set(Calendar.SECOND, iSecs);
alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
Toast.makeText(MainActivity.this, "Event is now set for " +iHours+":"+iMins, Toast.LENGTH_LONG).show();
}
@Override
protected void onDestroy() {
alarmManager.cancel(pendingIntent);
unregisterReceiver(broadcastReceiver);
super.onDestroy();
}
}
Если срабатывает сигнализация сразу, то вы дали дату/время в прошлом. Вам нужно учитывать возможность того, что выбранное время прошло уже сегодня. –