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

브로드캐스트 리시버 질문있습니다

0 추천
BTService에서 sendBroadcast 로 BroadcastReceiver로 받는데

이 BroadcastReceiver 클래스에서 코딩을

public class BluetoothSignalReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context $context, Intent $intent) {

        Intent intent = new Intent($context, TempActivity.class);
        intent.setAction($intent.getAction());
        intent.putExtra("temp1", $intent.getStringExtra("signal1"));
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        $context.startActivity(intent);
    }
} 이런식으로 했습니다.

그리고 TempActivity에서 button_01.setText($intent.getStringExtra("temp1")); 이렇게 받아왔더니

MainActivity에 있다가 데이터가 들어오면 TempActivity로 넘어가면서 데이터가 출력이 됩니다.

여기서 궁금한게 MainActivity 화면을 보고 있는 상태에서 Activity전환없이 TempActivity에

데이터가 출력되도록 할 수는 없는건가요??
탄약7 (380 포인트) 님이 2016년 7월 26일 질문

1개의 답변

+1 추천
 
채택된 답변

MainActivity 안에 브로드캐스트리시버를 선언한 후 그쪽에서 브로드캐스트를 받아서 처리하는 방법이 있구요.

애초에 브로드캐스트 하지 않고

Intent intent = new Intent(A.this, A.class);

intent.addFlag(Intent.FLAG_ACTIVITY_SINGLE_TOP);

startActivity(intent);

이처럼 자기 자신을 호출하면 액티비티의 onNewIntent로 오게됩니다.

 

onNewIntent를 오버라이드하셔서 사용하셔도 됩니다.

 

질문을 잘못 봤네요 ..

현재 액티비티 스택이 TempActivity가 아래에 깔려있다면

TempActivity안에 브로드캐스트리시버를 선언하고 브로드캐스트를 받아서 처리하시면 될것 같습니다..

모나미153 (17,540 포인트) 님이 2016년 7월 26일 답변
탄약7님이 2016년 7월 27일 채택됨
@Override
    protected void onResume() {
        super.onResume();
        registerReceiver();
    }

    @Override
    protected void onPause() {
        super.onPause();
        unregisterReceiver();
    }

    private void registerReceiver() {
        if (mmReceiver != null)
            return;
        final IntentFilter theFilter = new IntentFilter();
        theFilter.addAction("kr.mint.bluetooth.receive");

        this.mmReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context $context, Intent $intent) {
                if ("kr.mint.bluetooth.receive".equals($intent.getAction())) {
                    Intent intent = new Intent(TempActivity.this, TempActivity.class);
                    intent.setAction($intent.getAction());
                    intent.putExtra("temp1", $intent.getStringExtra("signal1"));
                    intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
                    $context.startActivity(intent);
                }
            }
        };
        this.registerReceiver(this.mmReceiver, theFilter);
    }

    private void unregisterReceiver(){
        if(mmReceiver!=null)
            this.unregisterReceiver(mmReceiver);
    }

리시버 부분을 이렇게 코딩했고 btn.setText($intent.getStringExtra("temp1")이렇게 불러왔는데

출력이 안되네요...
FLAG_ACTIVITY_SINGLE_TOP으로 같은 액티비티를 띄우셨다면
해당 액티비티 안에서 onNewIntent 처리를 해 주셔야 합니다..
우와... 바로 해결 됬네요!

그러면 A 액티비티를 보고있을때 들어온 데이터가
B 액티비티에 저장된 상태로있어 A에서 B로 이동했을때
이전에 들어온 데이터가 표시되있는 상태가 되려면
FLAG를 변경해줘야 하는건가요??

설명이 너무 애매한가요..?

일단 FLAGS에 대해 공부를 해보겠습니다
어떤 내용인지 잘 이해가 안가네요 ㅋㅋ
새로 액티비티를 띄우신거면
그냥 onCreate에서 getIntent로 받아서 처리해도 되죠.
아직 개념이 부족해서 가능한건지 아닌지도 모르고
막 질문하는거 같네요..ㅠ
공부 좀 하고 다시 질문드리겠습니다 감사합니다!
...