2013-10-12 2 views
0

Я делаю пример аварийного приложения.Широковещательная передача не доходит до метода приемника

После установки времени вещания установлен, но метод приемник не дозвонились в то время

ReminderMainActivity:

public class ReminderMainActivity extends Activity implements OnClickListener, TimePicker.OnTimeChangedListener             { 

    DatePicker   _datePicker   = null; 
    TimePicker   _timePicker   = null; 
    EditText   _taskEditText  = null; 
    Button    _setButton   = null; 
    String    _st_time   = null; 
    String    _st_date   = null; 
    Calendar   _calendar   = null; 
    Calendar   _calendarNow  = null; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.reminder_view); 
     init(); 
    } 


    private void init() { 
     // TODO Auto-generated method stub 
     _datePicker = (DatePicker) findViewById(R.id.date_picker); 
     _timePicker = (TimePicker) findViewById(R.id.time_picker); 
     _taskEditText = (EditText) findViewById(R.id.task_desc); 
     _setButton = (Button) findViewById(R.id.set_button); 
     _calendarNow = Calendar.getInstance(); 
     _calendar = (Calendar) _calendarNow.clone(); 

     _timePicker.setOnTimeChangedListener(this); 
     _setButton.setOnClickListener(this); 


    } 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     String st_taskDescription = _taskEditText.getText().toString(); 
     int year = _datePicker.getYear(); 
     int monthOfYear = _datePicker.getMonth(); 
     int dayOfMonth = _datePicker.getDayOfMonth(); 


     _calendar.set(Calendar.YEAR, year); 
     _calendar.set(Calendar.MONTH, monthOfYear); 
     _calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); 
     _calendar.set(Calendar.SECOND, 0); 
     _calendar.set(Calendar.MILLISECOND, 0); 

     Log.i("", "Alarm Set: " + _calendar.getTimeInMillis()); 
     if(_calendar.compareTo(_calendarNow) <= 0){ 
       //Today Set time passed, count to tomorrow 
       _calendar.add(Calendar.DATE, 1); 
       Log.i("", "Time passed : " + _calendar.getTimeInMillis()); 
       Toast.makeText(this, "Time passed" + _calendar.getTimeInMillis(), Toast.LENGTH_SHORT).show(); 

       } 



     Intent intent = new Intent(this,AlarmReceiver.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(ReminderMainActivity.this, 0, intent, 0); 
     AlarmManager alarm_manager = (AlarmManager) getSystemService(ALARM_SERVICE);   
     alarm_manager.set(AlarmManager.RTC_WAKEUP, _calendar.getTimeInMillis(), pendingIntent); 
     Toast.makeText(this, "Alarm Set: " + _calendar.getTimeInMillis(), Toast.LENGTH_SHORT).show(); 

    } 

    @Override 
    public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { 
     // TODO Auto-generated method stub 
     _calendar.set(Calendar.HOUR_OF_DAY, hourOfDay); 
     _calendar.set(Calendar.MINUTE, minute); 
     _st_time = hourOfDay + " : " + minute; 
    } 

} 

приемник класса

public class AlarmReceiver extends BroadcastReceiver{ 
    @Override 
    public void onReceive(Context arg0, Intent arg1) { 
     // TODO Auto-generated method stub 
     Log.i("AlarmActivity", "Receiver"); 
     Toast.makeText(arg0, "Intent Received", Toast.LENGTH_SHORT).show(); 
    } 

} 

Если я заменяю _calendar.getTimeInMillis() с System.CurrentTimeInMillis(), тогда это работает .. но это не то, что я хочу

Класс приемника также упоминается в манифесте. Я не могу найти ошибку. Может ли кто-нибудь помочь? Я что-то пропустил?

+0

Ваш '_calendar' может быть в прошлом, в зависимости от значений, которые вы используете с' set() '. Помимо этого, используйте ** 'adb shell dumpsys alarm' **, чтобы проверить ваш запланированный будильник. – CommonsWare

+0

Я не понял, как использовать этот второй, вы можете сделать это. – Sjk

+0

Откройте командную строку и введите ** 'adb shell dumpsys alarm' **. Если ** 'adb' ** находится на вашем пути, это приведет к сбросу системной информации, связанной с сигналами тревоги с вашего устройства или эмулятора. http://developer.android.com/tools/help/adb.html#othershellcommands – CommonsWare

ответ

0

получил решение. После получения экземпляра каландра очистите значения.

_calendarNow = Calendar.getInstance(); 
_calendar = (Calendar) _calendarNow.clone(); 
_calendar.clear(); 
Смежные вопросы