2013-04-30 3 views
0

나는 처음 알람을 울리면 다시 꺼내려고 노력하는 이유에 대해 혼란 스럽다. 하지만 제 3의 시간은 작동하고 5 번, 7 번, 9 번 등등 ... 그래서 2 번마다 알람이 작동합니다. 내가 철저하게 혼란 스러워요. 왜냐하면 내가 보류 의도를 uniqID에 부여했기 때문이죠. 그래서 이것은 일어나지 않았을 것입니다.여러 개의 알람을 작성하면 알람 관리자가이를 재정의합니까?

setAlarm.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View arg0) { 
       AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 

       myCal.set(Calendar.YEAR, datePicker.getYear()); 
       myCal.set(Calendar.MONTH, datePicker.getMonth()); 
       myCal.set(Calendar.DAY_OF_MONTH, datePicker.getDayOfMonth()); 
       myCal.set(Calendar.HOUR, timePicker.getCurrentHour()); 
       myCal.set(Calendar.MINUTE, timePicker.getCurrentMinute()); 
       myCal.set(Calendar.SECOND, 0); 

       //precaution if the user restarts their phone. Saves the alarm to a file 
       //and when user restarts their phone register a broadcast receiver to pick up 
       //the broadcast and then re-create the alarms that were stored. 
       setAlarms(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth() 
         , timePicker.getCurrentHour(), timePicker.getCurrentMinute(), assignmentName); 

       Intent triggered = new Intent(ManageAlarms.this, alarms.DisplayNotification.class); 
       triggered.putExtra("NotificationId", 1); 
       triggered.putExtra("assignmentName", assignmentName); 

       PendingIntent displayIntent = PendingIntent.getActivity(
         ManageAlarms.this, counter, triggered, PendingIntent.FLAG_ONE_SHOT); 

       /*boolean alarmActive = (PendingIntent.getActivity(getBaseContext(), 0, 
         triggered, PendingIntent.FLAG_NO_CREATE) != null); 

       if (alarmActive) { 
        alarmManager.cancel(displayIntent); 
       }*/ 

       alarmManager.set(AlarmManager.RTC_WAKEUP, 
         myCal.getTimeInMillis(), displayIntent); 
       counter++; 
+0

어떻게 알람을 설정하고 의도는 무엇입니까? 다음 알람을 마지막 알람에 가깝게 설정할 수 있습니까? 예를 들어, Alarm은 8 시간마다 실행 된 다음 8 초가 지나면 1 초에 닫히고, 그 다음 알람은 정지 후 바로 다음 초로 설정됩니다. – Opiatefuchs

+0

'adb shell dumpsys alarm'을 사용하여 이벤트가 예정되어 있다고 생각되는 시간에 예약되고 있음을 확인하십시오. – CommonsWare

+0

궁극적으로 사용자가 원하는만큼의 알람을 설정할 수 있기를 바랍니다. 앱의 기능 중 하나는 누군가가 수업에서 배정 할 수있는 알람을 설정할 수 있다는 것입니다. 그리고 나는 그것이 내가 경보를 얼마나 가깝게 설정했는지와 관련이 없다고 생각한다. 지금 알람을 설정하고 5 분 정도 기다렸다가 다음 시간을 설정하면 아무런 차이가 없으며 울리지 않습니다. 그 후 하나는 것입니다. 감사합니다 CommonsWare, 나는 그것을 조사하고 나의 경보가 예정된 것을 본다 ... 그러나 그것은 단지 다른 모든 경보가 해고당하는 이유에 관해서 나에게 어떤 설명도주지 않는다. ... – cj1098

답변

1

는 문서에 따르면, "알람 설정"에서 보류 의도는 방송 수신기 (See here)를해야한다. 나는 다음과 같은 추천 :

가 브로드 캐스트 리시버를 확장하고 onReceive를 구현해야합니다

PendingIntent displayIntent = PendingIntent.getBroadcast(
         ManageAlarms.this, counter, triggered, PendingIntent.FLAG_ONE_SHOT); 

DisplayNotification 클래스와

PendingIntent displayIntent = PendingIntent.getActivity(
         ManageAlarms.this, counter, triggered, PendingIntent.FLAG_ONE_SHOT); 

를 교체합니다().

+0

nope :/ 내가 그것을 할 때 방법에 그것은 onReceive에 얻지 않는다. 이유는 모르겠지만 ... – cj1098

+0

알 수없는 몇 가지 이유가 있습니다. getBroadcast 메서드를 사용하기 위해 변경 한 내용을 지웠으며 이제는 완벽하게 작동합니다 ... 말문이 닫힙니다. 때로는 안드로이드가 나를 당황하게합니다. 나는 단지 당신의 답을 받아 들일 것입니다 : D – cj1098

+0

BTW, 당신이 직면 한 원래의 문제에 대해서, 나는 비슷한 시나리오에서 조금 노력했습니다. Intent.FLAG_ACTIVITY_SINGLE_TOP을 사용하지 않으므로 각 알람 만료는 동일한 활동의 ​​새 인스턴스를 하나 만듭니다. 이 시나리오에서는 한 번에 내 에뮬레이터에서 2 개의 인스턴스 만 활성화되었음을 알게되었습니다 (그리고 Galaxy S3로 3 in). 다른 인스턴스 (우리는 더 많은 알람 만기가 있다고 가정 함)는 현재 활성 인스턴스를 닫을 때만 활성화됩니다 (즉, onCreate가 호출 됨). 놀랐던 한가지, 활동 생성 순서가 알람 만료 순서와 일치하지 않았습니다. – Sudhee

관련 문제