마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

액티비티<->서비스 BroadCast Receiver 오류 질문.(해결)

0 추천

해결방법 :

Stack Overflow에 질문을 하여 얻음 답입니다.

내부 클래스로 BoardCastReceiver를 선언하여 문제가 되었고

내부클래스인 경우 manifest.xml에 등록을 하면 안되고 registerReceiver()을 사용하라는 조언을 들었고

그렇게 하였더니 해결되었습니다.

혹시 저와 같은 오류가 나는 분들은 참고하셨으면 좋겠습니다.

아래는 제가 질문했던 주소입니다.

http://stackoverflow.com/questions/29345166/java-lang-runtimeexception-unable-to-instantiate-receiver

 

 

 

질문 : 

 

로그가 짤려 다시 올려달라는 요청이 있어서 글을 다시 올립니다.(중복 죄송합니다.)

 

실행은 스마트폰(g2)로 하였습니다.

 

서비스 상에서 콜백메소드가 호출 될 시 sendBrocast()를 사용하여 결과값을 MainActivity로 넘기고

그값을 textview로 표시하는 것을 아래 소스코드로 구현하였습니다.

 

로그1)에서 보이듯이 처음에는 정상적으로 동작을 하고 UI변경도 됩니다.

그리고 콜백 메소드는 계속 호출이 되지만 SendBroadcast()는 count변수로 인해 한번만 호출이 됩니다.

 

정상적으로 UI변경이 되고 몇 초후 로그2)에서 보이는것 처럼 갑작스럽게 오류가 나네요.

BroadCast 상의 문제인건 같은데 잘못된 부분을 찾기가 힘드네요.

 

어떤점이 잘못됬는지 좋은 답변 부탁드립니다.

 

MainActivity.class

Service.class

onPeripheralScan(콜백메소드).

 

오류 LOG

로그1)

count : 0일때만 sendBroadcast()가 호출하고 count ==1이어서 콜백 메소드만 호출되빈다.

로그2)

로그1)에 이어 바로 뜨는 로그 입니다. 크기가 커서 분류하였습니다.

벅수 (870 포인트) 님이 2015년 3월 28일 질문
벅수님이 2015년 4월 3일 수정

1개의 답변

+2 추천
 
채택된 답변
프로젝트 클린 한번 해보시구여 뭔가 새로 추가한 클래스가 내부적으로 APK 파일 만들면서 제대로 적용안되고 꼬였나보아요

그래도 안되면 매니페스트.xml 에 추가한 receiver랑 intent-filter를 등록하고 해보세여
 

아래 링크의 답변도 참고하시기 바랍니다

http://stackov.com/questions/10305261/broadcastreceiver-cant-instantiate-class-no-empty-constructor
Gradler (109,780 포인트) 님이 2015년 3월 30일 답변
벅수님이 2015년 4월 3일 채택됨
답변 감사합니다.
클린도 하였고 아래와 같이 메니페스트에도 등록도 하였습니다.
<receiver android:exported="false" android:name="com.example.beaconTest.BeaconReceiver">
            <intent-filter >
                <action android:name="com.example.beaconTEST.TEST"/>
            </intent-filter>
        </receiver>

앱이 안된다기 보다는 저 위의 글처럼 Receiver로 부터 값을 받아 ui변경이 되고 1~2초 후에 오류가 뜨면서 app이 종료됩니다.
BeaconReceiver가 MainActivity에 private로 선언한 내부 클래스라서 문제가 되는것 같네요 public static으로 바꿔서 해보세여 매니페스트에서 BeaconReceiver를 위와 같이 작성하면 해당 Receiver를 찾지 못합니다. MainActivity$BeaconReceiver 라고 수정하셔야 합니다.
답변 감사합니다.
StackOverflow에 올려서 답을 받았습니다.
내부클래스로 할경우 manifest.xml에 등록을 하지말고
regisetrReceiver()를 사용하라고 해서 그렇게 하니 오류는 나지 않았습니다.
...