내 안드로이드 응용 프로그램에서 Text to Speech 엔진을 사용하여 Text를 말합니다. 전화가 울릴 때 음성 코드가 실행됩니다. 연설이 망가졌고 logcat에 다음 경고가 표시됩니다. 이 문제는 SDK 15 (아이스크림 샌드위치)에서 특히 특히 전화가 울릴 때 음성 코드가 호출 될 때만 나타납니다. 그렇지 않으면 ICE에서도 전화가 울리지 않을 때 음성 코드가 완벽하게 작동합니다. 코드는 SDK (8) 및 (10)전화벨이 울리는 동안 Android 음성이 끊어졌습니다.
경고에 잘 작동 I 수 있습니다
com.svox.pico W/AudioTrack(549): obtainBuffer() track 0x177dd8 disabled, restarting
com.svox.pico W/AudioTrack(549): obtainBuffer() track 0x177dd8 disabled, restarting
com.svox.pico D/dalvikvm(549): GC_CONCURRENT freed 441K, 8% free 6552K/7111K, paused 3ms+107ms
com.svox.pico W/AudioTrack(549): obtainBuffer() track 0x156058 disabled, restarting
com.svox.pico D/dalvikvm(162): GC_CONCURRENT freed 532K, 11% free 8391K/9415K, paused 5ms+6ms
코드의 관련 부분은 서비스의 스레드에서 실행하고 서비스가 때를 방송 수신기에서 시작됩니다 전화를받습니다. 여기 저기에 갈 정도는 아니지만 내가 비슷한 상황을 볼 수 있기 때문에 전화 볼륨이 전화가 오면 벨소리 재생 할 곳 (진동하지) 링에있는 경우
// The constructor of speaker class
public Speaker(final Context context, final Settings settings)
{
this.settings = settings;
params = new HashMap<String, String>();
params.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_ALARM));
params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, "myapp");
this.context = context;
synchronized (synch)
{
talker = new TextToSpeech(context, this);
}
Utils.log(TAG, "Created TextToSpeech..");
}
@Override
public void onInit(final int status)
{
synchronized (synch)
{
Utils.log(TAG, "TTS onInit..");
if(talker == null)
{
throw new RuntimeException(Utils.collectPlatformInfo(context));
}
if(TextToSpeech.ERROR == talker.setOnUtteranceCompletedListener(new SpeechFinishedListener()))
{
Utils.log(TAG, "Error tts setUt");
return ;
}
int code = talker.setLanguage(Locale.getDefault());
if(code == TextToSpeech.LANG_NOT_SUPPORTED || code ==TextToSpeech.LANG_MISSING_DATA)
{
Utils.log(TAG, String.format("Error settingLang on TTS code %d", code));
}
if(TextToSpeech.ERROR == talker.setSpeechRate(settings.getSpeed()))
{
//this error is not a fatal, we can continue
Utils.log(TAG, "Error tts setSPeechrate");
}
if(TextToSpeech.ERROR == talker.setPitch(settings.getPitch()))
{
//this error is not a fatal, we can continue
Utils.log(TAG, "Error tts setPitch");
}
ready = true;
}
}
// The function used to provide text to be spoken..
public void speak(final String text) throws InterruptedException
{
if(bEngineFailure)
return;
if(!ready)
{
Utils.log(TAG, "engine not initialized");
bEngineFailure = true;
return;
}
bSpeechComplete = false;
talker.speak(text, TextToSpeech.QUEUE_ADD, params);
while(!bSpeechComplete)
{
Thread.sleep(100);
}
}
추측하기 어렵습니다. 관련 코드 샘플을 게시하십시오. – Sam
@ Sam 나는 게시물을 업데이트하고 관련 코드를 추가했습니다. – Ahmed