2013-05-14 2 views
1

내가 설정을 가지고 알람 관리기를 취소하는 방법 : 다음과 같이 알람 관리기

Intent intent = new Intent(TopActivity.this, RecordActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    intent.putExtra(Utils.KEY_RECORD_TIME, recordLength); 
    intent.putExtra(Utils.KEY_REC_START_TIME, start); 

    saveTimeAndLength(start, recordLength); 

    PendingIntent pintent = PendingIntent.getActivity(TopActivity.this, 0, intent, 0); 
    AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    alarm.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pintent); 

다음

가 취소하도록되어 있지만, 항상 실패합니다. 내가 뭘 놓치고 있니?

AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
Intent intent = new Intent(TopActivity.this, RecordActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
intent.putExtra(Utils.KEY_RECORD_TIME, start); 
intent.putExtra(Utils.KEY_REC_START_TIME, recordLength); 

PendingIntent pintent = PendingIntent.getActivity(TopActivity.this, 0, intent, 0); 
try { 
    alarmManager.cancel(pintent); 
    Log.e(TAG, "Cancelling all pending intents"); 
} catch (Exception e) { 
    Log.e(TAG, "AlarmManager update was not canceled. " + e.toString()); 
} 

I에 유래에 대한 답변을 많이 읽었지만 여전히 문제가 무엇을 알아낼 수 없었다.
미리 감사드립니다.

+0

누군가가 이미 추가 데이터 키 (시작의 RecordLength)?'intent.putExtra (Utils.KEY_RECORD_TIME,의 RecordLength) 반전 언급 ; intent.putExtra (Utils.KEY_REC_START_TIME, 시작); 'vs.'intent.putExtra (Utils.KEY_RECORD_TIME, start); intent.putExtra (Utils.KEY_REC_START_TIME, recordLength); - 필터링 문제가 발생하지 않아야합니다 ... – Johannes

답변

2

을 취소 할 때 약간의 시간을 절약 할 다른 사람을 도움이 될 것을 기대하고 여기에 내 대답을 게시 할 예정입니다.
아무 래도 플래그 양쪽에 PendingIntent.FLAG_UPDATE_CURRENT을 추가하면 문제가 해결됩니다.

PendingIntent pintent = PendingIntent.getActivity(TopActivity.this, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT); 


문제를 해결했다.
설정 알람

Intent intent = new Intent(TopActivity.this, RecordActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    intent.putExtra(Utils.KEY_RECORD_TIME, recordLength); 
    intent.putExtra(Utils.KEY_REC_START_TIME, start); 

    saveTimeAndLength(start, recordLength); 

    PendingIntent pintent = PendingIntent.getActivity(TopActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    alarm.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pintent); 

취소 알람

AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
Intent intent = new Intent(TopActivity.this, RecordActivity.class); 

PendingIntent pintent = PendingIntent.getActivity(TopActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
try { 
    alarmManager.cancel(pintent); 
    Log.e(TAG, "Cancelling all pending intents"); 
} catch (Exception e) { 
    Log.e(TAG, "AlarmManager update was not canceled. " + e.toString()); 
} 
0

당신은 보류중인 의도를 만든 다음이

AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 

Intent updateServiceIntent = new Intent(context, MyPendingIntentService.class); 
PendingIntent pendingUpdateIntent = PendingIntent.getService(context, 0, updateServiceIntent, 0); 

// Cancel alarms 
try { 
    alarmManager.cancel(pendingUpdateIntent); 
} catch (Exception e) { 
    Log.e(TAG, "AlarmManager update was not canceled. " + e.toString()); 
} 
+0

나는 똑같은 일을하고 있다고 생각합니다! –

2

알람 관리기가 이벤트를 취소하는 경우 취소해야하는, 그것은 두 개의 텐트를 비교해야합니다.

이는 filterEquals 통해 이루어진다 (텐트 다른) 두 방법 의도가 의도 해상도 (필터링)의 목적에 대해 동일한 경우

가 결정하는 말했다. 즉, 해당 작업, 데이터, 유형, 클래스, 및 카테고리가 동일한 경우입니다. 이것은 인 텐트에 포함 된 여분의 데이터 을 비교하지 않습니다.

클래스가 동일 할 때 왜 일치하지 않는지 잘 모르겠습니다.

도 데이터를 설정 한 것을 극복하기 위해 동일한 문제가있었습니다.

이것이 도움이되는지 확인하십시오. 편집을 할

알람을 설정하는 동안

Intent intent = new Intent(TopActivity.this, RecordActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    intent.putExtra(Utils.KEY_RECORD_TIME, recordLength); 
    intent.putExtra(Utils.KEY_REC_START_TIME, start); 
    intent.setData(Uri.fromParts("yourappscheme", "alarm", null)); 
    saveTimeAndLength(start, recordLength); 

    PendingIntent pintent = PendingIntent.getActivity(TopActivity.this, 0, intent, 0); 
    AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
    alarm.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pintent); 

그리고 필요

AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
Intent intent = new Intent(TopActivity.this, RecordActivity.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
intent.putExtra(Utils.KEY_RECORD_TIME, start); 
intent.putExtra(Utils.KEY_REC_START_TIME, recordLength); 
intent.setData(Uri.fromParts("yourappscheme", "alarm", null)); 

PendingIntent pintent = PendingIntent.getActivity(TopActivity.this, 0, intent, 0); 
try { 
    alarmManager.cancel(pintent); 
    Log.e(TAG, "Cancelling all pending intents"); 
} catch (Exception e) { 
    Log.e(TAG, "AlarmManager update was not canceled. " + e.toString()); 
} 
+0

당신이 당신의 문제를 어떻게 극복했는지 알 수 있습니까? 내가하는 모든 일은 제대로 작동하지 않는 것 같습니다. @ Vivek Khandelwal 나는 알람에 설정 한 의도를 저장하고 취소했지만 작동하지 않습니다. –

+0

나는 당신의 방법을 시험해 보았다. 어떻게 든 PendingIntent.FLAG_UPDATE_CURRENT 플래그가 문제를 해결했다. 꽤 이상한! –

관련 문제