0

브로드 캐스트하기 위해 보류중인 인 텐트를 사용하는 알람 관리자에서 알람을 삭제하려고하는데 브로드 캐스트 리시버를 사용하여 프로세스를 포착 및 실행하면 deleteReminder 기능이 호출되지만 시간이 올 때 의도는 여전히 발사 중이다. 코드에 문제가있는 경우 알려 주시기 바랍니다.보류중인 인 텐트 삭제하기

public class ReminderManager { 

private Context mContext; 
private AlarmManager mAlarmManager; 
private Intent i; 

public ReminderManager(Context context) { 
    mContext = context; 
    mAlarmManager = (AlarmManager) context 
      .getSystemService(Context.ALARM_SERVICE); 
} 
public void setReminder(Long taskId, Calendar when) { 

    System.out.println("setReminder Called"); 

    i = new Intent(mContext, Receiver.class); 
    i.putExtra(Database.KEY_ROWID, (long) taskId); 

    Toast.makeText(mContext, "setReminder" + Fragment.uniqueId, 
      Toast.LENGTH_SHORT).show(); 
    PendingIntent pi = PendingIntent.getBroadcast(mContext, 
      Fragment.uniqueId, i, PendingIntent.FLAG_ONE_SHOT); 

    mAlarmManager.set(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), pi); 
} 

public void deleteReminder(int uniqueID) { 

    System.out.println("deleteReminder Called"); 
    i = new Intent(mContext, Receiver.class); 
    i.putExtra(Database.KEY_ROWID, (long) uniqueID); 

    Toast.makeText(mContext, "deleteReminder" + uniqueID, 
      Toast.LENGTH_SHORT).show(); 

    PendingIntent.getBroadcast(mContext, uniqueID, i, 
      PendingIntent.FLAG_UPDATE_CURRENT).cancel(); 
      mAlarmManager.cancel(PendingIntent.getBroadcast(mContext, uniqueID, i, 
      PendingIntent.FLAG_UPDATE_CURRENT)); 
} 
} 
+0

Fragment.uniqueId는 param uniqueId와 동일합니까? – pskink

+0

그들은 같은 값을 가지고 있습니다. 단지 다른 장소에서 오는 것입니다. – Eriz

답변

0

내가 문을 추가하거나 알람 매니저에서 알람을 삭제하는 경우 setReminder 함수에 부울 내가 삭제 여부를하려는 경우 확인하고, 추가, 그것은 코드의 크기를 감소하고있다 정확히.

public class ReminderManager { 

private Context mContext; 
private AlarmManager mAlarmManager; 
private Intent i; 

// Constructor to set the context and set the alarmManager 
public ReminderManager(Context context) { 
    mContext = context; 
    mAlarmManager = (AlarmManager) context 
      .getSystemService(Context.ALARM_SERVICE); 
} 

// used to create a pending intent using task id and Calendar object 
public void setReminder(Long taskId, Calendar when, boolean delete) { 

    System.out.println("setReminder Called"); 

    i = new Intent(mContext, OnAlarmReceiver.class); 
    i.putExtra(NotesDatabase.KEY_ROWID, (long) taskId); 

    Toast.makeText(mContext, "setReminder" + AddFragment.uniqueId, 
      Toast.LENGTH_SHORT).show(); 
    // broadcast !! // change the 
    PendingIntent pi = PendingIntent.getBroadcast(mContext, 
      AddFragment.uniqueId, i, PendingIntent.FLAG_ONE_SHOT); 

    if(delete == false){ 
    mAlarmManager.set(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), pi); 
    }else{ 
     pi.cancel(); 
     mAlarmManager.cancel(pi); 
    } 
} 
0

이 코드는 저에게 적합합니다.

public void deleteReminder(int uniqueID) { 

    System.out.println("deleteReminder Called"); 
    i = new Intent(mContext, Receiver.class); 
    i.putExtra(Database.KEY_ROWID, (long) uniqueID); 

    Toast.makeText(mContext, "deleteReminder" + uniqueID, 
      Toast.LENGTH_SHORT).show(); 

    PendingIntent pi = PendingIntent.getBroadcast(mContext, 
      Fragment.uniqueId, i, PendingIntent.FLAG_CANCEL_CURRENT); 

    mAlarmManager.cancel(pi); 

} 
+0

나는 이것을 시도했지만 알람 화면이 여전히 나타나고'intent i'도 역시 해고되고 있습니다. :( – Eriz