안드로이드 개발 질문/답변
(글 수 45,052)
public void SetAlarm(Cursor cursor) { AlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); calendar = new GregorianCalendar(); Intent To_Alarm_AlertActivity = new Intent( getApplicationContext(), Alarm_AlertActivity.class); cursor.moveToPosition(-1); while (cursor.moveToNext()) { if (cursor.getInt(1) == 1) { if (cursor.getInt(5) == 1) { PendingIntent pendingintent = PendingIntent.getActivity(getApplicationContext(), cursor.getInt(0)*10 + 1, To_Alarm_AlertActivity, PendingIntent.FLAG_UPDATE_CURRENT); Log.d("RequestCode", cursor.getInt(0) * 10 + 1 + ""); calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), cursor.getInt(2), cursor.getInt(3)+1, 00); Log.d("AlarmSetting", calendar.getTime() + ""); AlarmManager.set(android.app.AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingintent); } if (cursor.getInt(6) == 1) { PendingIntent pendingintent = PendingIntent.getActivity(getApplicationContext(), cursor.getInt(0)*10 +2, To_Alarm_AlertActivity, PendingIntent.FLAG_UPDATE_CURRENT); Log.d("RequestCode", (cursor.getInt(0) * 10 + 2) + ""); calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), cursor.getInt(2), cursor.getInt(3)+2, 00); Log.d("AlarmSetting", calendar.getTime() + ""); AlarmManager.set(android.app.AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingintent); } if (cursor.getInt(7) == 1) { PendingIntent pendingintent = PendingIntent.getActivity(getApplicationContext(), cursor.getInt(0)*10 +3, To_Alarm_AlertActivity, PendingIntent.FLAG_UPDATE_CURRENT); Log.d("RequestCode", (cursor.getInt(0) * 10 + 3) + ""); calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), cursor.getInt(2), cursor.getInt(3)+3, 00); Log.d("AlarmSetting", calendar.getTime() + ""); AlarmManager.set(android.app.AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingintent); } if (cursor.getInt(8) == 1) { PendingIntent pendingintent = PendingIntent.getActivity(getApplicationContext(), cursor.getInt(0)*10 +4, To_Alarm_AlertActivity, PendingIntent.FLAG_UPDATE_CURRENT); Log.d("RequestCode", (cursor.getInt(0) * 10 + 4) + ""); calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), cursor.getInt(2), cursor.getInt(3)+4, 00); Log.d("AlarmSetting", calendar.getTime() + ""); AlarmManager.set(android.app.AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingintent); } if (cursor.getInt(9) == 1) { PendingIntent pendingintent = PendingIntent.getActivity(getApplicationContext(), cursor.getInt(0)*10 +5, To_Alarm_AlertActivity, PendingIntent.FLAG_UPDATE_CURRENT); Log.d("RequestCode", (cursor.getInt(0) * 10 + 5) + ""); calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), cursor.getInt(2), cursor.getInt(3)+5, 00); Log.d("AlarmSetting", calendar.getTime() + ""); AlarmManager.set(android.app.AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingintent); } if (cursor.getInt(10) == 1) { PendingIntent pendingintent = PendingIntent.getActivity(getApplicationContext(), cursor.getInt(0)*10 +6, To_Alarm_AlertActivity, PendingIntent.FLAG_UPDATE_CURRENT); Log.d("RequestCode", (cursor.getInt(0) * 10 + 6) + ""); calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), cursor.getInt(2), cursor.getInt(3)+6, 00); Log.d("AlarmSetting", calendar.getTime() + ""); AlarmManager.set(android.app.AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingintent); } if (cursor.getInt(11) == 1) { PendingIntent pendingintent = PendingIntent.getActivity(getApplicationContext(), cursor.getInt(0)*10 +7, To_Alarm_AlertActivity, PendingIntent.FLAG_UPDATE_CURRENT); Log.d("RequestCode", (cursor.getInt(0) * 10 + 7) + ""); calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), cursor.getInt(2), cursor.getInt(3)+7, 00); Log.d("AlarmSetting", calendar.getTime() + ""); AlarmManager.set(android.app.AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingintent); } if (cursor.getInt(5) == 0 && cursor.getInt(6) == 0 && cursor.getInt(7) == 0 && cursor.getInt(8) == 0 && cursor.getInt(9) == 0 && cursor.getInt(10) == 0 && cursor.getInt(11) == 0) { PendingIntent pendingintent = PendingIntent.getActivity(getApplicationContext(), cursor.getInt(0)*10 +8, To_Alarm_AlertActivity, PendingIntent.FLAG_UPDATE_CURRENT); Log.d("RequestCode", (cursor.getInt(0) * 10 + 8) + ""); calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), cursor.getInt(2), cursor.getInt(3)+8, 00); Log.d("AlarmSetting", calendar.getTime() + ""); AlarmManager.set(android.app.AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingintent); } } } }
제가 구현한 setalarm() 부분입니다.
데이터베이스의 컬럼0에는 알람을 구분할 id값이, 컬럼 2에는 시간이, 3에는 분이 들어있습니다.
데이터베이스에는 컬럼넘버가 5번 부터 11번 까지에는 0혹은 1의 값이 들어있으며,
구현한대로 각값이 0혹은 1에 따라 pendingintent의 requestcode값을 달리해주며 알람이 여러개 설정되게끔 했습니다.
이 setalarm()부분은 알람의 메인엑티비티가 oncreate 될때와 알람 추가버튼을 이용해서 알람 추가후 다시 메인 엑티비티로
돌아오는 onActivityResult 부분에서 사용했습니다.
근데 문제는 만약 오전 10시에 알람을 맞췄다면 오전 11시에 알람을 키면 펜딩인텐트가 작동해 버립니다.
즉, 지나간 알람이 작동을 하는거죠 ㅠㅠ 왜이런건가요....알람메니저의 set기능에 시간을 밀리세컨드 단위로 넣어주면
그 시간에 울리는거 아닌가요? ㅠㅠ