[Wearable DataLayer]모바일에서 안드로이드웨어로 이미지 여러장 전송하기!

2015. 6. 5. 11:08·공부/Android

모바일에서 웨어로 데이터를 전송하기 위해선 데이터 맵을 생성해 그 안에 데이터를 넣고 웨어로 전송하고 웨어에서 다시 데이터맵을 받으면 된다. Google에서 이와 관련된 API를 제공하고 있다.

 

#모바일

       //wear Initialize
        // Build a new GoogleApiClient for the Wearable API

GoogleApiClient googleClient; 


        googleClient = new GoogleApiClient.Builder(this)
                .addApi(Wearable.API)
                .addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this)
                .build();

------------------------------------------------------------------------------------------------

// 시계로 전송할 데이터 묶음인 데이터 맵을 생성한다. 여기서 설정하는 PATH값을 웨어에서 확인해서 데이터를 받는다.
        PutDataMapRequest dataMap = PutDataMapRequest.create("/STRING_DATA_PATH");

for(int i =0; i<이미지 갯수;i++){

dataMap.getDataMap().putByteArray("key"+i,바이트로 변환한 bitmap 데이터);

}

dataMap.getDataMap().putInt("stepCount",이미지 갯수); // step의 수를 dataMap에 삽입.

// 데이터 맵으로 전송할 요청 객체를 생성한다.
        PutDataRequest request = dataMap.asPutDataRequest();

// 데이터 전송 및 전송 후 실행 될 콜백 함수 지정
        Wearable.DataApi.putDataItem(googleClient, request).setResultCallback(resultCallback);

-------------------------------------------------------------------------------------------

    // 시계로 데이터 및 메시지를 전송 후 실행되는 메소드
    private ResultCallback resultCallback = new ResultCallback() {
        @Override
        public void onResult(Result result) {

            String resultString = "Sending Result : " + result.getStatus();

            //Toast.makeText(getApplication(), resultString, Toast.LENGTH_SHORT).show();
        }
    };

-------------------------------------------------------------------------------------------

#웨어

리스너 서비스를 이용해서 웨어 앱이 실행돼 있지 않더라도 앱이 동작하도록 해줬다. 받은 데이터를 intent로 웨어의 MainActivity로 넘겨준다.

       //wear Initialize
 private GoogleApiClient mGoogleApiClient; // 구글 플레이 서비스 API 객체

//웨어러블리스너 서비스는 앱이 실행되 있지 않더라도 데이터가 변경되거나 메시지를 수신할 때 이를 감지할 수 있는것.
public class ListenerService extends WearableListenerService {

    String[] receiveString;
    int receiveCount;
    int currentPage;

    @Override
    public void onDataChanged(DataEventBuffer dataEvents) {


        // 데이터 이벤트 횟수별로 동작한다.
        for (DataEvent event : dataEvents) {

            // 데이터 변경 이벤트일 때 실행된다.
            if (event.getType() == DataEvent.TYPE_CHANGED) {

                // 동작을 구분할 패스를 가져온다.
                String path = event.getDataItem().getUri().getPath();

                // 패스가 문자 데이터 일 때
                if (path.equals("/STRING_DATA_PATH")) {
                    //앱을 실행시킨다.
                    Intent startIntent = new Intent(this, MainActivity.class);
                    // 이벤트 객체로부터 데이터 맵을 가져온다.
                    DataMapItem dataMapItem = DataMapItem.fromDataItem(event.getDataItem());

                    // 데이터맵으로부터 수신한 데이터를 가져온다.
                    receiveCount = dataMapItem.getDataMap().getInt("stepCount");


                    for(int i=0;i<receiveCount;i++){
                        receiveByte = dataMapItem.getDataMap().getByteArray("stepImage"+i);
                        startIntent.putExtra("receiveImage"+i,receiveByte);
                    }


                    startIntent.putExtra("receiveCount",receiveCount);

                    startIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(startIntent);

                }
                // 데이터 삭제 이벤트일 때 실행된다.
            } else if (event.getType() == DataEvent.TYPE_DELETED) {
                // 데이터가 삭제됐을 때 수행할 동작
            }
        }
    }
}

 

---------------------------------------------------------------------------------------------

 

일어날 수 있는 문제들 !

NetworkOnMainThreadException 에러!

//URL로부터 이미지를 불러오는 코드가 안먹히는 이유는 네트워크 작업이 UI 쓰레드(메인스레드)에서 동작하기 때문이다.
 // 안드로이드 3.0 이후버젼부터는 UI쓰레드에 부담이 가는 것을 막기 위해 별도의 쓰레드에서 처리하도록 원천적으로 막아놨다.

                // 해결방법은 아래 내용을 추가해주면 된다.

 //                 if(android.os.Build.VERSION.SDK_INT > 9) {
//
//                StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
//
//                StrictMode.setThreadPolicy(policy);
//
//                }

 

error code 4003

WearableStatusCodes:  public static final int DATA_ITEM_TOO_LARGE

Indicates that the data item was too large to set.

데이터맵에 들어간 데이터들의 용량이 너무 커서 발생하는 문제입니다. 이미지 품질을 줄여서 용량을 줄여보세요

 

 

반응형
'공부/Android' 카테고리의 다른 글
  • GoogleMap을 ViewPager에 fragment에 추가하기.
  • google Map Clustering + Drawer로 마커를 모으고 리스트뷰에 리스트 띄우기 성공
  • Android Wear CountDownTimer 사용하기
  • Android Wear / Google Play Service를 이용한 Wear와 handheld의 데이터 송수신
JangGiraffe
JangGiraffe
안녕하세요~ 반갑습니다! 머무시면서 즐거운 시간 보내시길 바랍니다. 오픈카톡 : https://open.kakao.com/o/sYEBs0uh
  • JangGiraffe
    giraffe1010
    JangGiraffe
  • 전체
    오늘
    어제
    • 분류 전체보기 (390) N
      • 공부 (155) N
        • AI (3)
        • Spring (10)
        • JAVA (31)
        • python (6)
        • 기타 (12) N
        • 메세지 (3)
        • Jsp,Servlet (4)
        • HTML (12)
        • Javascript (6)
        • C#,ASP.NET (2)
        • WEB (2)
        • DB (11)
        • Android (18)
        • [BaaS]Parse.com (4)
        • 졸업프로젝트 (4)
        • AWS,네이버클라우드플랫폼 (2)
        • Ubuntu (6)
        • maven (1)
        • 자료구조 (15)
        • 서버 (3)
      • 게임 (0)
      • 관심 (22)
        • 사진 (1)
        • 패스오브엑자일(POE) (1)
        • 월드오브워크래프트 (4)
        • 블로그 (7)
        • 이슈 (1)
        • IT (5)
        • 기타 게임 (3)
      • 자료 (2)
        • 면접 (2)
      • 먹거리 (103)
        • 음식리뷰 (99)
        • 카페리뷰 (4)
      • 여행 (35)
        • 국내여행 (23)
        • 해외여행 (12)
      • 생활정보 (68)
        • 생활정보 (33)
        • 상품리뷰 (34)
        • 세미나후기 (1)
      • 끄적끄적 (5)
        • 영화후기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 문의(카톡)
    • 방명록
  • 링크

    • 2zino
    • wildbluffer
  • 공지사항

  • 인기 글

  • 태그

    돈벌기
    ChatGPT
    강원도여행
    강서구맛집
    오징어난전
    김포맛집
    발산 회식
    맛집
    가양맛집
    양양 가볼만한 곳
    발산맛집
    마곡맛집
    시즈오카
    월드오브워크래프트
    홍대맛집
    자취
    떡볶이
    왕십리맛집
    와우
    제주도맛집
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
JangGiraffe
[Wearable DataLayer]모바일에서 안드로이드웨어로 이미지 여러장 전송하기!
상단으로

티스토리툴바