AlarmManager를 이용한 background notification 작업
https://developer.android.com/training/scheduling/alarms.html
http://droidmentor.com/schedule-notifications-using-alarmmanager/
AlarmManager를 이용한 작업 (jobscheduler를 이용한 경우도 같음) 은 기기가 reboot되면 스케쥴해놓은 것이 사라진다. 그러므로 reboot시 재등록을 하는 작업이 필요하다.
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application>
<!-- Register the Alarm Receiver -->
<receiver android:name=".AlarmReceiver"
android:enabled="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<application>
재등록의 코드 예시 (broadcast receiver에 의해 수행된다. )
public class AlarmReceiver extends BroadcastReceiver {
String TAG = "AlarmReceiver";
@Override
public void onReceive(Context context, Intent intent) {
// 이부분에서 alarmmanager 재시작
Intent intent1 = new Intent(context, cls);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
DAILY_REMINDER_REQUEST_CODE, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) context.getSystemService(ALARM_SERVICE);
am.cancel(pendingIntent);
pendingIntent.cancel();
intent의 타깃 class(위의 예시에서는 cls)는 정해진 알람에 따라 수행된다.
알람의 정해진 시기에 따라 수행될 작업은 broadcast receiver에서 수행된다.
public class AlarmReceiver extends BroadcastReceiver {
String TAG = "AlarmReceiver";
@Override
public void onReceive(Context context, Intent intent) {
//Trigger the notification
// 이부분에서 notification을 만들고 발생한다.
}
}