Please Enable JavaScript!
Gon[ Enable JavaScript ]

반응형

안드로이드(Android) 아날로그 시계의 시간을 음성(TTS) 으로 알려주기

 

개발환경 : window 7 64bit, Eclipse Mars, Android 4.2.2

 

이 예제는 아날로그 시간을 만드는 방법과

아날로그 시계에서 바라보는 시간값을 얻어와

TTS 를 이용해 사용자에게 음성으로 시간을

알려주는 예제 입니다.

 

 

먼저 아날로그 시계를 표현하기 위해 레이아웃에는

AnalogClock 추가합니다.

 

<AnalogClock
    android:id="@+id/myAnalogClock"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />

 

소스 구현은 xml 에서 AnalogClock 읽어와 객체를

생성한뒤 setOnClickListener 함수에 바로 아래에

있는 리스너 클래스를 셋팅합니다.

이 리스너 클래스는 시계를 클릭하면 실행하는

코드가 있습니다.

 

analogClock = (AnalogClock) findViewById(R.id.myAnalogClock);
analogClock.setOnClickListener(AnalogClockOnClickListener);

 

아날로그 시계를 클릭하게 되면 이벤트가 발생하면서

현재 시간을 알아온뒤 문자열을 구성합니다.

그리고 speck() 함수를 이용해 현재 시간을 음성으로

알려 줍니다.

 

private AnalogClock.OnClickListener AnalogClockOnClickListener 
			= new AnalogClock.OnClickListener() {

	public void onClick(View v) {

		final Calendar c = Calendar.getInstance();

		mHour = c.get(Calendar.HOUR_OF_DAY);
		mMinute = c.get(Calendar.MINUTE);

		String myTime = "지금시간은 " + String.valueOf(mHour) + " 시 "
				+ String.valueOf(mMinute) + " 분입니다. ";

		txtView.setText(myTime);
		myTTS.speak(myTime, TextToSpeech.QUEUE_FLUSH, null);
	}
};

 

Activity 객체가 소멸되면 TTS 객체는 소멸시켜야 합니다.

@Override
protected void onDestroy() {
	super.onDestroy();
	myTTS.shutdown();
}

 

아래는 메인 Activity 레이아웃의 전체 xml 입니다.

TextView AnalogClock 가 있습니다.

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="현재시간 알려주는 TTS" />

    <AnalogClock
        android:id="@+id/myAnalogClock"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="시계를 클릭하시면 현재시간을 말해줍니다. " />

    <TextView
        android:id="@+id/myText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

 

메인 Activity 전체 소스입니다.

시계를 클릭하게 되면 현재시간을 말해주고

TextView TTS로 말하는 음성을 문자로

보여줍니다.

 

import java.util.Calendar;

import android.app.Activity;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.view.View;
import android.widget.AnalogClock;
import android.widget.TextView;

public class SampleActivity8 extends Activity implements OnInitListener {

	private TextToSpeech myTTS;
	private AnalogClock analogClock;
	private TextView txtView;
	private int mHour, mMinute;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_sample_activity8);

		myTTS = new TextToSpeech(this, this);

		analogClock = (AnalogClock) findViewById(R.id.myAnalogClock);
		analogClock.setOnClickListener(AnalogClockOnClickListener);
		txtView = (TextView) findViewById(R.id.myText);

	}

	private AnalogClock.OnClickListener AnalogClockOnClickListener 
				= new AnalogClock.OnClickListener() {

		public void onClick(View v) {

			final Calendar c = Calendar.getInstance();

			mHour = c.get(Calendar.HOUR_OF_DAY);
			mMinute = c.get(Calendar.MINUTE);

			String myTime = "지금시간은 " + String.valueOf(mHour) + " 시 "
					+ String.valueOf(mMinute) + " 분입니다. ";

			txtView.setText(myTime);
			myTTS.speak(myTime, TextToSpeech.QUEUE_FLUSH, null);
		}
	};

	@Override
	protected void onDestroy() {
		super.onDestroy();
		myTTS.shutdown();
	}

	public void onInit(int status) {
		// TODO Auto-generated method stub
	}
}

 

 

반응형
Posted by 녹두장군1
,