1

간단한 채팅 응용 프로그램을 구축 중입니다. 메시지를 받으면 방송 메시지를 보냈습니다.LocalBroadcastReceiver가 스레드 내부에서 작동하지 않습니다.

서비스에 의해 시작된 스레드 내에서 실행되므로 스레드에 컨텍스트를 전달합니다. MyConnection은 클래스 확장 스레드입니다. 내가 메시지를받을 때

@Override 
public void onCreate() { 
    super.onCreate();  
    connection = new MyConnection(getApplicationContext()); 
} 

그래서 스레드 내부, 나는

Intent i = new Intent(); 
i.putExtra("from", message.getFrom()); 
i.putExtra("message", message.getBody()); 
i.setAction(MyService.MESSAGE_RECEIVED);     
_context.sendBroadcast(i); 

_context 내가 스레드의 생성자에 전달 된 getApplicationContext()입니다 ... 이렇게. 내 Manifest 파일에 receiver이 등록되어 있습니다.

이렇게 모두 작동하며 수신자가 메시지를 성공적으로 수신합니다.

이제 이것을 LocalBroadcastManager을 사용하도록 변경하고 싶습니다. 그래서 나는 단순히 변경되었다했던 _context.sendBroadcast(i)BroadcastReceiver이 방송의 데이터를 수신하지 않고 그러나

LocalBroadcastManager.getInstance(_context).sendBroadcast(i); 

이 방법을 보냈다.

내가 뭘 잘못하고 있니? 지역 방송을 수신하려면 Manifest에서 다른 방식으로 수신기를 등록해야합니까? 그것을 작동시키기 위해 필요한 다른 단계가 있습니까?

+0

이 방법을 시도해 볼 수 있습니까? http://stackoverflow.com/a/12270926/1218762, 이것에 대해 잘 모르겠습니다. –

+0

이것이 저에게 효과적입니다. http://stackoverflow.com/a/16832647/1218762 –

답변

1

방송 수신기를 registerReceiver 또는 매니페스트에 등록 했습니까?

getApplicationContext()을 전달하는 대신 ServiceContext이므로을 전달하십시오.

+0

그래서 어떤 컨텍스트 나는 지나간다? 나는 보내고받는 데 모두 같은 맥락을 사용해야한다고 생각했다. 그래서'getApplicationContext'를 사용했습니다. –

+0

아니요, 방송용으로 동일한 의도를 전달하는 한 중요하지 않습니다. 실제로 한 응용 프로그램은 브로드 캐스트를 보내고 다른 응용 프로그램은 브로드 캐스트를받을 수 있습니다. 컨텍스트는 분명히 다릅니다. –

관련 문제