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

데이터 전달에 관한 질문이에요

0 추천

 

 

측정모듈에서 측정한값을 블루투스를 통해서 안드로이드에 들어오고 그값을 db에 저장 및 유니티액티비티(유니티프로젝트를 Gradle export해서 안드로이드 스튜디오에 import함)로 넘겨서 unityplaler.unitysendmessage로 값을 유티니로 보내서 그 값으로 움직이는 오브젝트를 만들려고 합니다 .

 

유니티플레이어액티비티 전환시에도 값을 받아서 db에 저장을 하는걸 확인 db베이스를 통해서 확인을 하였는데요.

메인 액티비티에서 센서값을 string으로 지정해서 intent.putExtra를 이용해서 유니티 플레이어 액티비티 보내니까 처음에 들어가는 측정값만 로그에 계속 출력이되고 센서를 움직여도 측정값에 변화가 없어서 질문드립니다.

 

메인 액티비티에서 측정값이 handler로 들어갑니다.

여기서 핸들러 값을 유니티 플레이어 액티비티로 보낼려면 어떻게 해야되나요?

코드는 다음과 같이 작성을 하였습니다

        mHandler = new Handler(){    //블루투스 데이터 수신 핸들러
            public void handleMessage(Message msg){

                if(msg.what == MESSAGE_READ){

                    try {
                        readMessage = new String((byte[]) msg.obj, "UTF-8");
                        if((readMessage.indexOf("s") == 0) && (readMessage.indexOf("e") == 21))  {
                            if(readMessage != null) { // readmessage와 null(빈값)은 같지 않다
                                String str = readMessage;
                                test = readMessage.split("");
                                str0 = readMessage.substring(0,22);
                                // 모듈에서 넘어오는 데이터에 부호(+,-)값이 포함 되있음
                                // indexof에 부호값까지 포함함
                            }
                            else if(readMessage == null){
                                readMessage = str0;

                            }

                        }
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }

                    mReadBuffer.setText(str0);
                }

                if(msg.what == CONNECTING_STATUS){
                    if(msg.arg1 == 1)
                        mBluetoothStatus.setText("Connected to Device: " + (String)(msg.obj));
                    else
                        mBluetoothStatus.setText("Connection Failed");
                }
            }
        };
....
....
    // UnityPlayerActivity로 화면 전환 및 str0값 전달
    @Override
    public void onClick(View v) {

        String test0 = str0;
        String ip = "123456";
        Intent intent = new Intent(this, UnityPlayerActivity.class);
        intent.putExtra("test",ip);
        intent.putExtra("test1",test0);

        startActivity(intent);

    }
초심자1 (790 포인트) 님이 2018년 6월 19일 질문
초심자1님이 2018년 6월 19일 수정

1개의 답변

0 추천
기본적으로 A 액티비티에서 B 액티비티를 호출하면, A 액티비티는 onPause()가 호출되어, 멍청해 집니다.
물론 Activity의 방식에 따라서, 백그라운드에서 실행이 가능할 수도 있습니다.
그러나 구조적으로는 Activity는 그러려고 만든 것이 아닙니다.

Activity는 UX를 가진 클래스로서 한번에 하나의 Activity만 동작하도록 구성되는 게 바람직합니다.
즉 A에서 B 액티비티를 띄우면 A액티비티는 동작을 안하는게 맞죠.

구조적으로 올바르게 접근하려면, 블루투스 Handler를 Service 방식으로 띄우는게 맞습니다.
그리고 Service에서 Broadcast Receiver를 사용하는게 바람직해 보입니다.

Broadcast Receiver 샘플: https://gist.github.com/swarut/4551127

당장의 손쉬운 해법 보다는 정석으로 개발하는게 바람직하다고 생각합니다.
Will Kim (43,170 포인트) 님이 2018년 6월 19일 답변
Will Kim님 말씀은 메인 액티비티에 있는 블루투스 Handler를 Service.JAVA로 변한한뒤에 Service에서 Broadcast Receiver사용해서 서브액티비티로 값을 보내주란 말씀이신거죠?
넵~. 계속 동작하는 기능은 서비스로 만드는게 맞아요~
service관련 예제는 블루투스 챗을 참고하면 되는건가요?
지금 작성된 코드는 다 퍼와서 짜집기한거라서,,,,,,,,
...