2017-04-03 8 views
0
public class setAlarm extends AppCompatActivity { 

final Calendar setat = Calendar.getInstance(); 
Calendar[] calendar = new Calendar[8]; 

public void dimensions(){ 
    DisplayMetrics dm = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(dm); 

    int width = dm.widthPixels; 
    int height = dm.heightPixels; 

    getWindow().setLayout((int) (width * 0.62), (int) (height * 0.4)); 
} 

public void clock(){ 
    final TextView ora = (TextView)findViewById(R.id.clock); 
    findViewById(R.id.clock).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final Calendar time = Calendar.getInstance(); 
      int hour = time.get(Calendar.HOUR_OF_DAY); 
      int minute = time.get(Calendar.MINUTE); 

      TimePickerDialog timePickerDialog; 
      timePickerDialog = new TimePickerDialog(setAlarm.this, new TimePickerDialog.OnTimeSetListener(){ 
       @Override 
       public void onTimeSet(TimePicker timePicker, int selectedHour, int selectedMinute){ 
        ora.setText(selectedHour + ":" + selectedMinute); 
        setat.set(Calendar.HOUR_OF_DAY, selectedHour); 
        setat.set(Calendar.MINUTE, selectedMinute); 
       } 
      }, hour, minute, true); 
      timePickerDialog.setTitle("Select Time"); 
      timePickerDialog.show(); 
     } 
    }); 
} 

public void alarm(){ 
    clock(); 
    findViewById(R.id.confirm).setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      CheckBox[] boxes = new CheckBox[8]; 
      boxes[0] = (CheckBox)findViewById(R.id.check0); 
      boxes[1] = (CheckBox)findViewById(R.id.check1); 
      boxes[2] = (CheckBox)findViewById(R.id.check2); 
      boxes[3] = (CheckBox)findViewById(R.id.check3); 
      boxes[4] = (CheckBox)findViewById(R.id.check4); 
      boxes[5] = (CheckBox)findViewById(R.id.check5); 
      boxes[6] = (CheckBox)findViewById(R.id.check6); 

      if(boxes[0].isChecked()) {setAlarm(1);} 
      if(boxes[1].isChecked()) {setAlarm(2);} 
      if(boxes[2].isChecked()) {setAlarm(3);} 
      if(boxes[3].isChecked()) {setAlarm(4);} 
      if(boxes[4].isChecked()) {setAlarm(5);} 
      if(boxes[5].isChecked()) {setAlarm(6);} 
      if(boxes[6].isChecked()) {setAlarm(7);} 

      Toast.makeText(setAlarm.this, "Alarm has been set!", Toast.LENGTH_SHORT).show(); 
      //finish(); 
     } 
    }); 

} 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.alarm); 
    dimensions(); 
    alarm(); 
} 

public void setAlarm(int day){ 
    Calendar calendar = Calendar.getInstance(); 
    calendar.set(Calendar.DAY_OF_WEEK, day); 
    calendar.set(Calendar.HOUR_OF_DAY, setat.get(Calendar.HOUR_OF_DAY)); 
    calendar.set(Calendar.MINUTE, setat.get(Calendar.MINUTE)); 
    calendar.set(Calendar.SECOND, 0); 

    long time = calendar.getTimeInMillis() - Calendar.getInstance().getTimeInMillis(); 

    Log.d("day", String.valueOf(day)); 
    Log.d("time", String.valueOf(setat.get(Calendar.HOUR_OF_DAY)) + ":" + String.valueOf(setat.get(Calendar.MINUTE))); 
    Log.d("actual", String.valueOf(Calendar.getInstance().get(Calendar.MINUTE))); 

    Intent intent = new Intent(getApplicationContext(), NotificationService.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 100, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    AlarmManager alarmManager = (AlarmManager)getApplicationContext().getSystemService(ALARM_SERVICE); 

    alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent); 
} 
} 

알람을 지정된시와 분으로 설정하고 매주 선택한 요일에 알람을 반복해야합니다. 문제는 알람을 확인한 후 선택한 시간에 즉각적으로 발사한다는 것입니다. 전에이 문제를 조사했지만 나에게 도움이되는 것을 찾을 수 없었습니다.Android 알람이 즉시 실행됩니다.

답변

0

알람이 즉시 발사되는 경우 문제는 아마도 시간이 과거가 아닌 미래라고 생각할 수 있습니다. calendar.getTimeInMillis()System.currentTimeMillis()보다 큰지 (alarm 방법에서) 확인하고 그렇지 않은 경우 캘린더 인스턴스를 적절하게 조정해야합니다.

+0

그리고'System.currentTimeMillis()'가'calendar.getTimeInMillis()'보다 큰 경우 어떻게해야합니까? –

+0

당신이 필요로하는 특정 타이밍에 따라 달라집니다 : 내 응용 프로그램에서 내 알람 매일, 그래서 내 계산은 나에게 과거에 번호를 부여한다면 나는 단지 밀리 세컨드에 그것의 미래까지 추가 한 다음 그것을 사용합니다. – Femi