2013-05-14 2 views
0

꺼집니다 :알람 관리기 onReceive는 지속적으로 나는 다음과 같은 방법과 브로드 캐스트 리시버를 만든

public void SetAlarm(Context context, int repeatingHours) 
{ 
    int repeatingTimeInMillis = 1000 * 60 * 60 * repeatingHours; // Millisec * Second * Minute * Hours where x is time between each alarm.  
    AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
    Intent i = new Intent(context, AutoUpdateReceiver.class); 
    PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
    am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()* repeatingTimeInMillis, repeatingTimeInMillis, pi); 
    Toast.makeText(context, "Alarm set to repeat every " + repeatingHours + " hours", Toast.LENGTH_SHORT).show(); 
} 

을하지만 최대한 빨리에서 setalarm 전화가 onReceive 지속적으로 꺼집니다 것으로 보인다.

receiver = new AutoUpdateReceiver(); 
     howOftenRadioGroup.setOnCheckedChangeListener(new android.widget.RadioGroup.OnCheckedChangeListener() 
    { 

     @Override 
     public void onCheckedChanged(RadioGroup group, int checkedId) 
     { 
      SharedPreferences prefEditor = getSherlockActivity().getSharedPreferences("com.kamstrup.ecamp", Context.MODE_PRIVATE); 
      int repeatingHours = 0; 
      switch(checkedId) 
      { 
      case R.id.auto_update_radio_hour_1: 
       repeatingHours = 1; 
       prefEditor.edit().putInt(SETTINGS_KEY, repeatingHours).commit(); 
       break; 
      case R.id.auto_update_radio_hour_3: 
       repeatingHours = 3; 
       prefEditor.edit().putInt(SETTINGS_KEY, 3).commit(); 
       break; 
      case R.id.auto_update_radio_hour_6: 
       repeatingHours = 6; 
       prefEditor.edit().putInt(SETTINGS_KEY, 6).commit(); 
       break; 
      case R.id.auto_update_radio_hour_12: 
       repeatingHours = 12; 
       prefEditor.edit().putInt(SETTINGS_KEY, 12).commit(); 
       break; 

      default: 
       break; 
      } 
      receiver.SetAlarm(getSherlockActivity(), repeatingHours); 
     } 
    }); 

왜 이런 일이 : 나는에서 setalarm 전화 곳 관련 어떤 식 으로든 경우

이 무엇입니까?

답변

1

내가 보는 문제는 을 repeatingTimeInMillis의 유형으로 사용한다는 것입니다. 시간 소인의 경우 항상 길이가이어야합니다. int의 용량이 충분하지 않으므로 오버플로로 인해 기간이 음수로 바뀔 수 있습니다.

또한

System.currentTimeMillis()* repeatingTimeInMillis 

확실히 잘못된 것 같다. 당신은 현재 시간에 시간 오프셋을 더하고 곱하지 않습니다.

관련 문제