본문 바로가기
코딩맛보기

안드로이드 웨어러블 와치 코딩 맛보기 3/3

by 101Architect 2016. 1. 4.

<안드로이드 웨어러블 와치 코딩 맛보기>

android wearable watch

이번에는 시계(와치)의 추가 기능 들을 살펴보도록 하겠습니다. 

이번 포스팅 순서 

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

  1. 버전 설정 변경

  2. Confirmation 성공, 실패, 어플 오픈

  3. 음성인식 결과 받기

  4. 스와이프 종료 막고 롱탭으로 종료 버튼 노출

  5. 지연확인뷰 (로딩이미지)

  6. 블루투스가 아닌 구글 서비스를 통한 앱과 웨어러블 통신

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


1. 버전 설정 변경

blank wear activity -> comfirmation activity  생성

app build.gradle  앱 버전관리


  • android:theme="@android:style/Theme.DeviceDefault" > 에러

app build.gradle  에서 힙메모리 부족으로 23 마시멜로우 -> 22로 변경

compileSdkVersion 22

buildToolsVersion "22.0.1"


dependencise {

1.0.0

6.5.87

}


setContentView(R.layout.round_activity_confrimation1);  round layout 에서 코딩해주면 round 로 변경해줘야 함




2. Confirmation 성공, 실패, 어플 오픈
public void onClick(View view) {

    //하나는 내가 정의한 클래스, 하나는 제공해주는 클래스
    Intent i = new Intent(Confrimation1Activity.this, ConfirmationActivity.class);

    //확인 액티비티의 애니메이션 타입
    i.putExtra(ConfirmationActivity.EXTRA_ANIMATION_TYPE, ConfirmationActivity.SUCCESS_ANIMATION);
    i.putExtra(ConfirmationActivity.EXTRA_MESSAGE, "--- Success!! ---");

    startActivity(i);
}

옵션 사용

FAILURE_ANIMATION

OPEN_ON_PHONE_ANIMATION



3. 음성 인식 결과 받기 

Blank wear activity -> WearVoiceActivity 생성

보이스 버튼이 눌렸을 때

voiceBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {

    //음성인식 페이지로 자동으로 넘김
    Intent i = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);

    //음성인식 페이지에 적용할 속성
    i.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);

    //이동했던 엑티비티에서 결과를 가지고 돌아와라
    //돌아 올때는 onActivityResult() 로 돌아감
    startActivityForResult(i, VOICE_REQUEST_CODE);

    }
});


음성 인식이 완료된 후 자동으로 호출되는 메서드

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    //VOICE_REQUEST_CODE 코드를 가지고 음성인지, 카메라인지, 어디서 왔는지 구분해주는 값
    //resultCode : 엑티비티정상 종료 여부
    //data : 이동 했던 페이지에서 처리했던 결과
    //리퀘스트 코드 구분 및 성공여부 확인
    if(requestCode==VOICE_REQUEST_CODE && resultCode == RESULT_OK){
    //음성인식 페이지에서 넘겨준 결과를 받음
    List<String> result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

    //음성인식 된 결과는 한가지만 있으면 되므로, 리스트에서 첫번째 결과값을 가져오면 된다.
    String text = result.get(0);
 
    //결과를 테스트뷰에 적용
    mTextView.setText(text);
    }
}

4. 스와이프 종료 막고 롱탭으로 종료 버튼 노출new values resource file 만들기 styles.xml<?xml version="1.0" encoding="utf-8"?>

<resources>
<style name="NoSwipeDismiss"
parent="@android:style/Theme.DeviceDefault">
<!--프로젝트 안에 전부 스와이프 종료가 막힘-->
<item name="android:windowSwipeToDismiss">false</item>
</style>

</resources>

롱탭으로 종료 버튼 노출

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    return super.dispatchTouchEvent(ev)
    || mGesture.onTouchEvent(ev);
    //기본 짧은 터치 || mgesture 의 롱 터치도 감지 시킴;
}

//화면 롱클릭 감지자
class LongPressListener extends GestureDetector.SimpleOnGestureListener{
    @Override
    public void onLongPress(MotionEvent e){
    dismissOverlay.show();
    }
}

5. 지연확인뷰 (로딩 이미지)

원형 이미지를 사용하기 위한 세팅

activity_circled_image.xml

xmlns:app="http://schemas.android.com/apk/res-auto"

round_activity_circled_image.xml

<android.support.wearable.view.CircledImageView

  android:layout_width="wrap_content"

  android:layout_height="wrap_content"

  android:src="@mipmap/ic_launcher"

  app:circle_color="#0000ff"

  app:circle_radius="60dp"

  android:padding="5dp"

  app:circle_border_width="10dp"

  app:circle_border_color="#ffffff"/>


protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.round_activity_circled_image);

    timerBtn = (Button)findViewById(R.id.timerBtn);
    delayImg = (DelayedConfirmationView)findViewById(R.id.delayImg);
    delayImg.setTotalTimeMs(3000); //3초간 지연

    timerBtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    //지연뷰 시작
    delayImg.start();
    }
});


//지연부에 이벤트 감지자 등록
delayImg.setListener(new DelayedConfirmationView.DelayedConfirmationListener() {
    @Override
    public void onTimerFinished(View view) {
    //지연이 완료된 후 호출
    Toast.makeText(CircledImageActivity.this, "finish", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onTimerSelected(View view) {
    //지연뷰를 클릭했을 때 호출
    delayImg.clearFocus();
    }
 });
}



반응형