마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

저장된 날짜를 받아와서 당일,하루전, 삼일전 알람이 울리게 하고 싶어요ㅠㅠ

0 추천
안녕하세요  이제 막 어플을 공부 중에 있는 학생입니다.

현재 물품의 유통기한을 알려주는 어플을 만들고 있는데요...

물품이름이랑 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());
     }
   }
익명사용자 님이 2014년 10월 16일 질문

1개의 답변

0 추천
현재는 설정된 시간에만 알람이 울리는데, 3일 전/1일 전/당일 총 3번의 알람이 울리게하고 싶으신건가요?

 

설정된 날짜의 3일 전부터 매일 알람이 울리게하고, 어느 요일에 울려야하는지를 저장해놨다가 그 요일이 맞으면 소리를 내고, 아니면 무시하는 방식으로 꼼수를 쓰면 됩니다.

db도 필요없고 preference만으로도 해결할 수 있어요.

일월화수목금토를 1011000 처럼 만들어서 저장하는거죠.
쎄미 (162,410 포인트) 님이 2014년 10월 17일 답변
...