2016-11-19 8 views
0

Я делаю андроид приложение сигнализации и установкой сигнализации с помощью кода ниже:AlarmManager не вызвать текущее время

Calendar alarm = Calendar.getInstance(); 
alarm.set(Calendar.YEAR, year1); 
alarm.set(Calendar.MONTH, month1); 
alarm.set(Calendar.DAY_OF_MONTH, day1); 
alarm.set(Calendar.HOUR_OF_DAY, hour1); 
alarm.set(Calendar.MINUTE, min1); 
alarm.set(Calendar.SECOND, 0); 

if(alarm.before(Calendar.getInstance())) 
{ 
    alarm.add(Calendar.DATE, 1); 
    Toast.makeText(getActivity(),"You selected the past time",Toast.LENGTH_SHORT).show(); 
} 
else 
{   
    Intent myIntent = new Intent(getActivity(), MyReceiver.class); 
    pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent, 0); 
    AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(getActivity().ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC, alarm.getTimeInMillis(), pendingIntent); 
} 

Все работает нормально, но проблема в том, когда я выбираю текущую дату, месяц, год, а также текущее время, оно отобразит «вы выбрали прошедшее время». Как решить эту проблему?

+0

Вы делаете правильные вещи, уверены ли вы, что переменные, год1, месяц1 и т. Д. Верны? – GiuseppeLabanca

+0

@GiuseppeLabanca Yup, я использую Toast для отображения, и он отображается правильно. Я не понимаю, почему он отобразит «Вы выбрали ...», если я выберу текущее время, а также текущую дату. –

+1

Я думаю, что это из-за того, что до тех пор, пока код не достигнет инструкции 'if', прошло некоторое время. По крайней мере, в диапазоне миллисекунд. Таким образом, вы можете использовать другой объект календаря для 'rightNow', который инициализируется вместе с' alarm' и использовать его для сравнения внутри if. – Marat

ответ

0

Попробуйте это. Надеюсь, что это решит вашу проблему.

Calendar alarm = Calendar.getInstance(); 
Calendar copy = (Calendar) alarm.clone(); 

alarm.set(Calendar.YEAR, year1); 
alarm.set(Calendar.MONTH, month1); 
alarm.set(Calendar.DAY_OF_MONTH, day1); 
alarm.set(Calendar.HOUR_OF_DAY, hour1); 
alarm.set(Calendar.MINUTE, min1); 

int result = alarm.compareTo(copy); 

if (result == 0) 
{ 
    Toast.makeText(getActivity(), "You selected current time", Toast.LENGTH_SHORT).show(); 
} 
else if (result < 0) 
{ 
    alarm.add(Calendar.DATE, 1); 
    Toast.makeText(getActivity(), "You selected the past time", Toast.LENGTH_SHORT).show(); 
} 
else 
{   
    Intent myIntent = new Intent(getActivity(), MyReceiver.class); 
    pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent, 0); 
    AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(getActivity().ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC, alarm.getTimeInMillis(), pendingIntent); 
} 
+0

Что означает результат 'result == 0' и' result <0'? Я попробовал ваш код, но он по-прежнему отображает «Вы выбрали прошедшее время». –

+0

Я отредактировал ответ. Я удалил строку, где вы установили 'seconds'' alarm'. Теперь это должно сработать. Если 'alarm' равно' copy', тогда результат будет равен 0. Если это до того, как результат будет равен числу меньше 0. Если результат больше, чем 0 – Marat

+0

Спасибо. Поскольку я хочу, чтобы будильник выполнял текущее время и дату, я могу удалить 'result == 0' и просто написать if' (result <0) ', else' {} '? –