2012-07-18 3 views
4

텍스트 음성 변환하는 안드로이드의 official 소개 "활동을 만들기에 좋은 첫 번째 단계는 해당 의도와 함께 TTS 자원의 존재를 확인하는 것입니다"라고 말한다이유는 "사용하기 불편"는 ACTION_CHECK_TTS_DATA의 의도인가?

Intent checkIntent = new Intent(); 
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE); 

그러나 @this thread에서 gregm 그렇지 않으면 제안 :

또한

에서, ACTION_CHECK_TTS_DATA 의도를 사용하지 않는, 그 어색한에 사용입니다.

대신, 다음을 수행하십시오

  1. 는, TextToSpeech
  2. 하는 OnInit 만들기 isLanguageAvailable을 확인()이 경우 앱이 모든 설정입니다. 그렇지 않으면 내가 제대로 이해한다면, @gregm이 무엇을/연기onActivityResult()에서 onInit()TextToSpeech.LANG_MISSING_DATA 확인하는 것입니다 제안의 ACTION_INSTALL_TTS_DATA

을 보낼 수 있습니다.

왜이 formal 방식보다 낫다?

왜 ACTION_CHECK_TTS_DATA 그래서 "사용하기 불편"인가?

답변

9

이것은 @gregm입니다.

ACTION_CHECK_TTS_DATA 더 복잡 실행과 더 많은 코드가 필요하지만 아직 설명해 드리죠 TextToSpeech.isLanguageAvailable()과 같은 일을 수행합니다 당신이 ACTION_INSTALL_TTS_DATA를 사용할 때

1) 두 개의 비동기 프로세스를 필요로합니다. 먼저 Intent을 시작하고 결과를 수신합니다. 둘째로, 앱이 모든 것을 대기하고있는 동안 잘못 될 수 onInit() 더 전화를 TextToSpeech을 기다리는.

2) if 문을 실행하고 필요한 경우 언어 데이터 설치를 처리 할 때 동일한 코드가 필요하므로 을 추가해야하는 이유는 무엇입니까? , 내 관점에서

Intent checkIntent = new Intent(); 
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE); 

public void onActivityResult(...) 
{ 
if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) 
(same tts init code here) 
} 

: 같은 코드의

if (TextToSpeech.isLanguageAvailable()) 
{ 
(same tts init code here) 
} 

또는> 1 라인 :

당신이 코드의 한 라인을 원하십니까 :

그것은 종기는 이렇게 Intent 둘러보기를 사용하는 대신 if 문으로 이동하는 것이 좋습니다. 나는 공식적인 안드로이드 문서가이 접근법을 추천하기 위해 바뀔 필요가 있다고 생각한다.

우리가 논의하고있는 두 접근법이 똑같은 일을한다고 생각하지 않는다면 herehere이있는 대체 구현을 확인하십시오. 이 모든 것들에 대해 신경 그냥 앱이 말을하지 않으려는 경우 또한, 그냥이 Activity를 확장 할 수.

+0

감사합니다. 귀하의 허락하에 나는 ** 추가 복잡성을 추가해야하는 이유에 대해 강조하고 있습니다 ** ** 본질적으로 대답의 핵심입니다. 나는 "공식적인"접근법이 취해지면 응용 프로그램이 작동하지 않게하는 비판적인 것을 놓치지 않도록하고 싶었습니다. +1하고 동의 함. – an00b

+2

안녕하세요, isLanguageAvailable을 사용하여 테스트했지만 원하는 결과를 제공하지 않습니다. 예를 들어, 한국어 음성 데이터가 설치되어 있지 않습니다. 그러나 한국어 음성 데이터가 다운로드되지 않을 때 isLanguageAvailable을 호출하면 간단히 LANG_COUNTRY_AVAILABLE이 반환됩니다. 이는 올바른 것입니다. 로케일은 음성 데이터가 아직 다운로드되지 않은 상태에서만 엔진에서 사용할 수 있습니다. 그러나 LANG_MISSING_DATA를 얻지 못하기 때문에 음성 데이터가 다운로드되었는지 여부는 확인할 수 없습니다. 솔루션이 더 이상 적용되지 않습니까? 감사! –

+2

추가하려면 LANG_COUNTRY_AVAILABLE은 음성 데이터가 다운로드되었음을 나타내지 않으며, 단지 지원되고 다운로드 될 수 있음을 나타냅니다. –