2012-06-12 6 views
1

내 주요 활동에서 앱을 처음로드 할 때 경고를 설정하는 setRepeatingAlarm() 메소드가 있습니다. 이 메서드는 열을 반복하고 SQLite 테이블의 각 행에서 정수 값을 가져 와서 Alarms를 성공적으로 설정합니다. 상기 방법은 그 후 다시 각 행을 반복하고, 데이터를 표시 할 CustomAdapter (목록)에 각을두고 종료 후Android에서 Alarm/PendingIntents를 취소 할 수 없습니다.

for (int i : AlarmDays) { 


     Calendar cal = Calendar.getInstance(); 
     if (cal.get(Calendar.MINUTE) >= i) 
      cal.add(Calendar.HOUR, 1); 
     cal.set(Calendar.MINUTE, i); 

     Intent intent = new Intent(ManageDebts.this, TimeAlarm.class); 
     pendingIntent = PendingIntent.getBroadcast(this, i, 
       intent, PendingIntent.FLAG_CANCEL_CURRENT); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 
       60 * 60 * 1000, pendingIntent); 
    } 

: 여기에서 기본적인 방법이다.

datasource = new DebtDataSource(this); 
    datasource.open(); 

    **am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    setRepeatingAlarm();** 

    values = datasource.getAllDebt(); 
    adapter = new MyArrayAdapter(this, values); 
    setListAdapter(adapter); 

나도 길게 누르면 행에 사용자가 원하는하고 항목을 삭제 또는 모두 삭제하는 버튼이 다음은 메인 클래스 내에서 onCreate에서 (기본에서 다시) 맥락이다 행. 모든 것이 작동하지만 경보가 사라지지 않습니다.

동일한 방법으로 동일한 pendingIntent를 설정하여 방법을 취소하지만 내 시도가 실패했습니다. 나는 그것을 어디에 넣을 지 모릅니다. 위의 내용은 모두 클래스에 있습니다.

사용자가 한 행 또는 모두를 삭제했는지 여부에 관계없이 모든 경고를 삭제하고 해당 방법을 반복하여 다시 설정하는 것이 쉬운 방법이라고 생각합니다. 아무도이 취소 코드를 어디에 넣을 지 알려줄 수 있습니까? 모든 대기중인 의도 때문에, 목록보기 ID를 얻을이 보류중인 의도 ID 될 수 있도록 하나를 추가하기위한 목록의 롱 클릭에

답변

5

PendingIntent pi = PendingIntent.getBroadcast(context, unique_id, i, 0); 
am.cancel(pi); 

UNIQUE_ID는 별도입니다.

해당 particluar PendingIntent가 삭제됩니다.

모든 경보를 취소하려면 경보를 설정하고 취소 할 때 for 루프를 만듭니다.

관련 문제