2011-11-25 4 views
2

Boot Receiver를 사용하여 AlarmManager를 실행하므로 매분마다 작업이 반복됩니다. 사용자가 AlarmManager의 모든 반복에서 수행되는 작업을 활성화/비활성화 할 수있는 app 옵션을 갖고 싶습니다. 지금까지 나는 절름발이 솔루션 만 사용했습니다. SharedPreferences에서 사용자의 환경 설정을 설정하고 AlarmManager의 모든 반복에서 SharedPreferences에서 사용자의 환경 설정을 확인하고이 환경 설정에 따라 기능이 실행되거나 무시됩니다.Android : BootReceiver에서 AlarmReceiver가 실행되는 것을 막을 수있는 방법이 있습니까?

지금까지 알고있는 한, AlarmManager 자체를 완전히 파괴 할 방법이 없습니다. 그러나 나는 틀릴지도 모른다.

또한 부팅 수신기가 AndroidManifest.xml에 등록되어 있고 onReceive가 호출 될 때 BroadcastReceiver가 실제로 존재하기 때문에 AlarmManager 객체에 대한 참조를 얻을 수있는 방법이 없을 수 있으므로 외부에서 경보를 취소 할 수 있습니다. AlarmManager.cancel. 그러나 나는이 모든 것에 대해 틀릴 수도 있습니다.

이 모든 것에 대해 오해하고 있거나 Boot (AlarmManager가 AlaramManager 내부 또는 외부에서 문제가되지 않음)에서 시작된 AlarmManager를 완전히 삭제/취소 할 수있는 방법이 있는지 물어보고 싶습니다. 어떤 아이디어? 미리 감사드립니다.

답변

5

동일한 Pending Intent를 사용하여 언제든지 알람을 취소 할 수 있습니다.

Intent intent = new Intent(show.this, TimeAlarm.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(show.this, 0, 
       intent, PendingIntent.FLAG_CANCEL_CURRENT); 

     <Alarm_Manager_Object>.cancel(pendingIntent); 
+0

빠른 답변 감사합니다. 예, AlarmManager.cancel 메소드에 대해 알고 있습니다. 그러나 문제는 Alarm_Manager_Object에 대한 참조가 없습니다. 이 객체에 대한 참조는 BootReceiver 클래스의 onReceive 메소드에서만 존재하며 (BroadcastReceiver를 확장하고 시스템 부팅시에 발생합니다)이 메소드는 참조를 10 초 정도 유지 한 다음 참조가 손실되거나 액세스 할 수 없거나, 그러나 나는 틀릴지도 모른다. – Lukas1

+1

그 경우 새로운 것을 가져 와서 그 중 하나에서 AlarmManager # cancel (PendingIntent)을 호출하십시오. 중요한 부분은 PendingIntent입니다. – Jens

+0

오, 미안, 당신 말이 맞아요, 방금 내가 얼마나 어리 석 었는지 깨달았 어. 대단히 감사합니다. – Lukas1

관련 문제