안녕하세요 이제 막 어플을 공부 중에 있는 학생입니다.
현재 물품의 유통기한을 알려주는 어플을 만들고 있는데요...
물품이름이랑 DatePicker을 이용해서 유통기한 날짜랑 알람설정 ON/OFF를 저장하는 것 까지는 했습니다.
그런데 이제는 Main화면에서 알람설정 버튼을 누르면 AlarmActiviy에서 스위치 ON한 값만 가져와서 (arrays.xml에서 저장한) 당일/하루전/삼일전 을 선택하고 원하는 시간을 TimePicker로 선택해서 알람을 울리고 싶어요...
현재는 TimePicker에서 설정한 시간에만 알람이 울립니다.
어떻게 하는지 좀 도와주세요ㅠㅠ
public class Time extends Activity implements OnDateChangedListener, OnTimeChangedListener{
/*알람관련 맴버 변수*/
//알람 매니저
private AlarmManager mManager;
//설정일시
private GregorianCalendar mCalendar;
//일자 설정 클래스
private DatePicker mDate;
//시작 설정 클래스
private TimePicker mTime;
/*통지 관련 맴버 변수*/
@SuppressWarnings("unused")
private NotificationManager mNotification;
private long nowTime;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//통지 매니저를 취득
mNotification = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
//알람 매니저를 취득
mManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
//현재 시각을 취득
mCalendar = new GregorianCalendar();
Log.i("HelloAlarmActivity",mCalendar.getTime().toString());
nowTime = mCalendar.getTimeInMillis();
//셋 버튼, 리셋버튼의 리스너를 등록
setContentView(R.layout.activity_time);
Button b = (Button)findViewById(R.id.set);
b.setOnClickListener (new View.OnClickListener() {
public void onClick (View v) {
setAlarm();
}
});
b = (Button)findViewById(R.id.reset);
b.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
resetAlarm();
}
});
//일시 설정 클래스로 현재 시각을 설정
mDate = (DatePicker)findViewById(R.id.date_picker);
mDate.init (mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH), this);
mTime = (TimePicker)findViewById(R.id.time_picker);
mTime.setCurrentHour(mCalendar.get(Calendar.HOUR_OF_DAY));
mTime.setCurrentMinute(mCalendar.get(Calendar.MINUTE));
mTime.setOnTimeChangedListener(this);
}
//알람의 설정
private void setAlarm() {
if(nowTime >= mCalendar.getTimeInMillis()){
Toast.makeText(Time.this, "입력한 날짜는 현재 날짜보다 이전입니다.", Toast.LENGTH_SHORT).show();
return;
}
Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(Time.this, 0, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), 0, sender);
Log.i("HelloAlarmActivity", mCalendar.getTime().toString());
}
//알람의 해제
private void resetAlarm() {
mManager.cancel(pendingIntent());
}
//알람의 설정 시각에 발생하는 인텐트 작성
private PendingIntent pendingIntent() {
Intent i = new Intent(getApplicationContext(), Time.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, i, 0);
return pi;
}
//일자 설정 클래스의 상태변화 리스너
public void onDateChanged (DatePicker view, int year, int monthOfYear, int dayOfMonth) {
mCalendar.set (year, monthOfYear, dayOfMonth, mTime.getCurrentHour(), mTime.getCurrentMinute());
Log.i("HelloAlarmActivity", mCalendar.getTime().toString());
}
//시각 설정 클래스의 상태변화 리스너
public void onTimeChanged (TimePicker view, int hourOfDay, int minute) {
mCalendar.set (mDate.getYear(), mDate.getMonth(), mDate.getDayOfMonth(), hourOfDay, minute);
Log.i("HelloAlarmActivity",mCalendar.getTime().toString());
}
}