안녕하세요 이거 가지고 며칠을 머리속에서 쌈 중인지 모르겠습니다.
//기본 알람 세팅하는 method
private void setAlarm() {
am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
am.setTimeZone("GMT+9:00");
hour = cat.get(Calendar.HOUR_OF_DAY);
minute = cat.get(Calendar.MINUTE);
Intent intent = new Intent(this, AlarmReceive.class);
PendingIntent pi = PendingIntent.getBroadcast(ConfigActivity.this, 0, intent, 0);
year = cat.get(Calendar.YEAR);
month = cat.get(Calendar.MONTH);
day = cat.get(Calendar.DAY_OF_MONTH);
// 알람 강제 해제
am.cancel(pi);
// 내일 이시간에 다시 알람 울리게 하기
am.setRepeating(AlarmManager.RTC_WAKEUP, cat.getTimeInMillis(), 1000*60*60*24, pi);
Param.setAlsetstat(true);
}
이건 정상 작동을 하는 것으로 파악되었습니다.
// Manifest 리시버 등록
<receiver android:name="AlarmReceive">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<category android:name="kr.audio.weather"/>
</intent-filter>
</receiver>
// Receiver에서 동작시키는 코드
Calendar cal = Calendar.getInstance();
year = cal.get(Calendar.YEAR);
month = cal.get(Calendar.MONTH);
day = cal.get(Calendar.DAY_OF_MONTH);
week_day = cal.get(Calendar.DAY_OF_WEEK);
wdb = new WeatherDBHelper(context);
wdb.openRDB();
db = wdb.getDb();
cur = new CurrentWeatherActivity(context);
//db에서 알람시간을 받아와서 Integer값으로 변환처리
c = db.rawQuery("SELECT * FROM WEATHER_INFO WHERE _id = 4", null);
if(c != null) {
c.moveToNext();
xt = c.getString(2);
xt1 = xt.substring(0,2);
xt2 = xt.substring(3,5);
}
c.close();
hour = Integer.parseInt(xt1);
minute = Integer.parseInt(xt2);
//현재 calendar 시간설정
cal.set(year, month, day, hour, minute, 0);
wdb.closeDB();
String x = intent.getAction();
if(x.equals("android.intent.action.BOOT_COMPLETED")){
Intent in = new Intent(context, AlarmReceive.class);
PendingIntent pi = PendingIntent.getService(context, 0, in, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarms = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarms.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 1000 * 60 * 60 * 24, pi);
}
}
혹시나 하여 바로 위 부분의 부팅이 되고 난 직후에 시간 설정이 어떻게 되었는지도 로그로 확인했지만 정상적이었습니다.
그러나 문제는 설정되었다고 확인이 된 이후에 저 리시버가 돌지 않는 다는 것인데요. 어떤 부분인지를 정확히 모르겠습니다.