[안드로이드 공부]/알림

브로드캐스트리시버 2개 이상 사용시, 부팅후 동적 재등록

코코모아 2015. 8. 22. 15:57

아래는 코모스튜디오가 직접 만든 무료 앱이에요
(한 번만 봐주세요 ^^)

01

02

03

정각알림 만들기(말하는시계)

말하는 시계 (취침, 자전거) 

말하는 타이머 음성 스톱워치 

1. 브로드캐스트리시버(BroadcastReceiver)를 사용해서 액티비티등에 다시 브로드캐스트를 보낼 수있다. 하지만, 만약 2개 이상의 브로드캐스트리시버를 등록할 경우엔 고려해야 할 점이 있다.


public void registerR(){

    IntentFilter filter = new IntentFilter();
filter.addAction(DO_1);
registerReceiver(mIntentReceiver, filter);

IntentFilter filterBoot = new IntentFilter();
filterBoot.addAction(DO_2);
registerReceiver(mIntentReceiver, filterBoot);
}

위와같이 필터를 각각 만들어 주어야 하며, 리시버는 하나만 만들어서 관리하면 된다.


2. 그리고, 단말기 재 부팅후 시작해야할 서비스나 동작이 있다면, 

<receiver android:name="com.comostudio.a.custom.Receiver">
    <intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED"></action>

이렇게 manifest에 추가를 해주면 되는데, 문제는 맨 위 처럼 액티비티에서 동적으로 리시버를 등록했을 경우다. 브로드캐스트 리시버에서 위 BOOT_COMPLETED를 받았다고 하더라도 액티비티로 다시 브로드캐스트(sendbroadcast) 할 수 없다는 것이다. 


이유는 부팅후, 액티비티가 반드시 한 번은 다시 실행되어야 다시 리시버가 등록되기 때문이다. 즉, 액티비티를 다시 띄우고 필요한 동작을 위해 센드 브로드캐스트를 하든지, 해당 동작을 서비스로 만드는등의 다른 조치가 필요하다.


3. 브로드캐스트 리시버에서 받은 브로드캐스트 액션을 검사


if(intent.getAction().equals(SActivity.DO_1))

이와 같이 검사를 하면 action에 null 이 올 경우 단말기가 죽을 수 있다.


if(SActivity.DO_1.equals(intent.getAction())) {

그래서 위와 같은 방식으로 변경하여 사용하도록 하자.


모든 게시물은 코모스튜디오의 소유이며, 무단 복제 수정은 절대 불가입니다.
퍼가실 경우 댓글과 블로그 주소를 남기고 해당 게시물에 출처를 명확히 밝히세요.