2014-11-26 6 views
0

В андроиде я должен установить будильник в специальный час, который будет звонить и открывать действие в нужное время суток.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(); 
    } 
} 
+0

Возможно, вы установили время, которое уже ** прошло **. Это немедленно срабатывает в AlarmManager ** **. –

+1

Вы правы! Я должен переработать свою функцию calculateTime. Спасибо ! Опубликовать решение, я проверю его. – ReyalS

ответ

Смежные вопросы