AlertDialog 를 이용하는 방법과 PopupMenu를 이용하는 방법이 있다.

AlertDialog를 이용하는 경우

PopupMenu를 이용하는 경우

CURRENT_TIMESTAMP 사용시 sqlite에는 기준시간에 대한 timestamp string이 저장된다. 이를 그대로 사용하기에는 문제가 있을수 있다. 그러므로 지역시간으로 변경 사용해야 한다. 이때 참고할 링크들

https://stackoverflow.com/a/7672633

PendingIntent는 생성시에 Intent obj와 고유한 id를 parameters로 받아들이게 되는데 삭제하는 경우 이들을 이용한다.

예를 들어 AlarmManager를 이용한 PendingIntent의 경우는 

아래와 같이 해결한다. ref) https://stackoverflow.com/questions/9493776/how-to-remove-already-defined-pending-intent

Rewrite the code in CancelAlarm() function

 PendingIntent pintent = PendingIntent.getService(context, IDs[i], 
                send, PendingIntent.FLAG_CANCEL_CURRENT 
                        | PendingIntent.FLAG_ONE_SHOT); 

With The Same Intent send and Same Id IDs[i] and then Cancel that pintent like this,

pintent.cancel();

참고 링크 : 

https://developer.android.com/training/scheduling/alarms.html

http://droidmentor.com/schedule-notifications-using-alarmmanager/

AlarmManager를 이용한 작업 (jobscheduler를 이용한 경우도 같음) 은 기기가 reboot되면 스케쥴해놓은 것이 사라진다. 그러므로 reboot시 재등록을 하는 작업이 필요하다. 

재등록 manifest의 예시

<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에서 수행된다. 

알람 수행 receiver 예시 코드

public class AlarmReceiver extends BroadcastReceiver {

   String TAG = “AlarmReceiver”;

   @Override
   public void onReceive(Context context, Intent intent) {
       //Trigger the notification
        // 이부분에서 notification을 만들고 발생한다.
   }
}

프로젝트 폴더를 복사해서 mac 컴퓨터의 원하는 위치에 복사해 넣는다. windows의 경우  usersyour usernameAndroidStudioProjects에 프로젝트가 기본적으로 저장된다. 그러나 mac의 경우는 다르다. 나의 경우는 documents폴더에 새 폴더는 만들어 저장했다. 위 에서 폴더는 복사했지만 keystore화일은 포함되어있지 않으므로 새로 생성한다. 

http://base.techority.com/2013/01/01/how-to-generate-a-key-for-your-android-app-on-a-mac/ 의 과정을 보고 생성한다.