2014-05-23 3 views
3

특정 시간에 2 개의 반복 알람을 취소하고 싶지만 현재 앱이 알람을 생성하자마자 취소를 호출하기로 결정했습니다. 예를 들어 13:18에 반복을 끝낼 시간을 설정하면 반복되는 알람은 그 시간이 될 때까지 반복되어야합니다.특정 시간에 알람 반복 취소

여기에 내가 함께 놀 된 코드의 일부입니다 :

Toast.makeText(this, "Alarm Scheduled for " + midnight, Toast.LENGTH_LONG).show(); 


    AlarmManager Databackon = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

     Databackon.set(AlarmManager.RTC_WAKEUP,midnight, stoprepeat(V)); 
    // Databackon.set(AlarmManager.RTC_WAKEUP,midnight, PendingIntent.getBroadcast(this,4, intent, PendingIntent.FLAG_UPDATE_CURRENT)); 



    Toast.makeText(this, "THIS " + midnight, Toast.LENGTH_LONG).show(); 


    /* 
     Button button1=(Button)findViewById(R.id.startupdates); 
     button1.setVisibility(View.INVISIBLE); 
     Button button2=(Button)findViewById(R.id.stopbutton); 
     button2.setVisibility(View.VISIBLE); 
    */ 
} 

public PendingIntent stoprepeat(View V) 
{ 
    Intent intent = new Intent(UpdatesActivity.this,AlarmReciever.class); 
    PendingIntent pendingIntent = 
      PendingIntent.getBroadcast(this,1, intent, PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); 
    am.cancel(pendingIntent); 

    Intent intent2 = new Intent(UpdatesActivity.this,DataOff.class); 
    PendingIntent pendingIntent2 = 
      PendingIntent.getBroadcast(this,2, intent2,PendingIntent.FLAG_UPDATE_CURRENT); 
    AlarmManager am2 = (AlarmManager) getSystemService(ALARM_SERVICE); 
    am2.cancel(pendingIntent2); 

     Toast.makeText(this, "Repeating Alarm stopped", Toast.LENGTH_LONG).show(); 

      Button button1=(Button)findViewById(R.id.startupdates); 
      button1.setVisibility(View.VISIBLE); 
      Button button2=(Button)findViewById(R.id.stopbutton); 
      button2.setVisibility(View.INVISIBLE); 

     return pendingIntent; 
} 

답변

9

귀하의 코드가 이해되지 않는다. 세 가지 기본 사항을 염두에 두어야합니다.

  1. 모든 경보는 특정 응용 프로그램에 연결됩니다.
  2. 경보 기능은 보류중인 의도를 기반으로합니다.
  3. 내과 일치하는 취소를 수행 할 수 있습니다.

다음과 같은 해결책을 구현할 수 있습니다.

Intent myIntent = new Intent(this, Target.class); 
PendingIntent pendingIntent = PendingIntent.getService(this, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
am.set(AlarmManager.RTC_WAKEUP, time, pendingIntent); 

이 취소 책임이 다른 알람을 생성하고 여기에 1 알람에서 pendingIntent을 넣어 :

는 평소와 같이 기본 경보를 생성

Intent cancellationIntent = new Intent(this, CancelAlarmBroadcastReceiver.class); 
cancellationIntent.putExtra("key", pendingIntent); 
PendingIntent cancellationPendingIntent = PendingIntent.getBroadcast(this, 0, cancellationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
am.set(AlarmManager.RTC_WAKEUP, time, cancellationPendingIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

CancelAlarmBroadcastReceiver가 다음 인 경우 :

public class CancelAlarmBroadcastReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     PendingIntent pendingIntent = intent.getParcelableExtra("key"); 
     AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     am.cancel(pendingIntent); 
    } 
} 

확인하지 않았습니다. 하지만 나는 그것이 효과가 있다고 생각합니다.

+1

EPICNESS이게 얼마나 도움이되었는지 전혀 모르겠군요. 정말 고맙습니다. – user3668879

+0

좋은 답변입니다. 많은 도움이되었습니다. :) – Yeahia2508

관련 문제