티스토리 뷰

프로그램/안드로이드 강좌

시간 알리미

서.라.연 2012. 8. 15. 14:09


이 자료들은 팁스소프트에서 제공하는 [ 알짜배기 ] 프로그램을 이용하면 더 편리하게 볼수 있습니다.
* 알짜배기 프로그램 받기 - http://www.tipssoft.com/bulletin/tb.php/QnA/8406
* 관리자의 Tipssoft 이야기를 들어보세요 ( 트위터 ID : tipssoft )
* 안드로이드 강좌 목록 - http://www.tipssoft.com/bulletin/tb.php/old_bbs/501
* 이 예제는 안드로이드 팜으로 만들어졌습니다.
이 예제는 사용자가 시간을 알고 싶을 때 '몇시야?' 라고 말하면 어플리케이션이 현재 시각을 알려줍니다.
아침에 일어나서나 출근 및 등교 준비를 하는 바쁜 시간에 핸드폰의 시계를 확인하기 힘든 경우 '몇시야?'
라고 말하면 사용자의 음성을 인식하여 현재 시각을 음성으로 알려주는 유용한 어플리케이션입니다.
이 자료는 음성 인식과 TTS 를 사용하며 아래 자료들을 기초로 작성되었으니 선행하여 살펴 보시기
바랍니다.
음성 인식(Voice Recognition) : http://www.tipssoft.com/bulletin/tb.php/FAQ/961
TTS 음성 출력의 종료 시점 알기 : http://www.tipssoft.com/bulletin/tb.php/FAQ/1164
어플리케이션이 실행되어 있을 경우, 계속해서 사용자의 음성을 입력받아 인식하기 때문에 배터리
소모가 크므로 핸드폰 충전 시에 사용하는 것이 좋습니다. 또한 음성 인식이 올바르게 되지 않거나
구글 인식기 서버에 문제가 생기거나 네트워크가 원활하지 않는 등의 문제로 인해 사용된 음성 인식
액티비티가 대기 상태로 빠질 경우 사용자가 직접 취소 버튼을 눌러서 정상적인 처리를 할 수 있도록
해주어야 합니다.
1. 실행 화면
알람 시작을 위해 아래 화면을 터치하면 오른쪽의 그림과 같이 사용자의 음성을 입력받는 음성 인식
액티비티가 실행됩니다. 이 액티비티가 실행될 때 사용자가 '몇시야?' 라고 말하면 그 음성이 인식되어
'오전 11시 50분입니다' 와 같은 방식으로 현재 시각을 음성으로 알려줍니다. 시간 알림은 오른쪽 그림의
취소 버튼을 클릭하여 종료시킬 수 있습니다.
2. 주요 소스 코드
// OnClickListener 인터페이스의 onClick 메소드를 정의한다.
public void onClick(View v)
{
m_touch_view.setText("");

// 현재 알람이 정지 상태인 경우
if( m_start_alarm == 0 ) {

m_start_alarm = 1;

// 음성인식을 시작한다.
startVoiceRecognitionActivity();
}
}
// 음성 인식 액티비티를 실행하는 메소드
public void startVoiceRecognitionActivity() {

// 음성 인식 행위에 대한 액티비티를 실행시킬 수 있는 인텐트 객체를 생성한다.
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
// 음성 인식기에 대한 언어 모델 정보를 실행될 액티비티에 전달한다.
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);

// 음성 인식기에 대한 언어 정보를 실행될 액티비티에 전달한다.
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE , "ko-KR" );
// 인텐트 정보에 맞는 액티비티를 실행한다.
startActivityForResult(intent, 0);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

// 액티비티를 시작할 때 0 으로 설정해둔 결과값인 경우
if ( requestCode == 0 ) {

// 액티비티가 성공적으로 종료된 경우
if( resultCode == RESULT_OK ) {

String pre_time = null, hour_check = null ;

// 사용자의 음성을 인식하여 해석한 결과를 String 객체로 반환한다.
ArrayList<String> result_list = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);

for(int i = 0 ; i < match_word.length ; i++) {

for(int j = 0 ; j < result_list.size() ; j++) {

if( match_word[i].equals(result_list.get(j))) {

// 시스템 시간(Hour)를 입력받아 String 형태로 저장한다.
SimpleDateFormat dateFormat = new SimpleDateFormat("HH");
Date date = new Date(System.currentTimeMillis());
hour_check = dateFormat.format(date);

// 입력받은 현재 시간을 정수형으로 변환한다.
int hour = Integer.parseInt(hour_check);

// 입력받은 시간이 오전(0~11)인 경우
if(hour < 12) {
hour_check = "";
hour_check += "오전 ";

// 입력받은 시간이 오후(12~23)인 경우
} else {
hour_check = "";
hour_check += "오후 ";
}

// 시스템 시간(Hour시 Minute분)을 입력받아 String 형태로 저장한다.
dateFormat = new SimpleDateFormat("hh시 mm분");
pre_time = dateFormat.format(date);

hour_check += pre_time + "입니다.";

// 현재 시간을 TTS 를 통해 음성 출력한다.
m_tts.speak( hour_check , TextToSpeech.QUEUE_FLUSH , null );

// 루프를 빠져 나오기위해 값을 변경한다.
i = match_word.length;

break;
}
}
}

// 음성 입력이 올바르지 않은 경우 다시 음성 입력을 시작한다.
if( hour_check == null ) {
startVoiceRecognitionActivity();
}
// 음성 인식 액티비티가 사용자의 취소 버튼에 의해 종료된 경우
} else if( resultCode == RESULT_CANCELED ) {

m_start_alarm = 0;

m_touch_view.setText("알람을 다시 시작하려면 터치하세요!");
}
}
super.onActivityResult(requestCode, resultCode, data);
}


댓글