간단한 채팅 응용 프로그램을 구축 중입니다. 메시지를 받으면 방송 메시지를 보냈습니다.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에서 다른 방식으로 수신기를 등록해야합니까? 그것을 작동시키기 위해 필요한 다른 단계가 있습니까?
이 방법을 시도해 볼 수 있습니까? http://stackoverflow.com/a/12270926/1218762, 이것에 대해 잘 모르겠습니다. –
이것이 저에게 효과적입니다. http://stackoverflow.com/a/16832647/1218762 –