2013-03-19 77 views
2

我的應用正在實現運行良好的文本到語音轉換。但是當我旋轉手機時,聽寫會自行停止。如何防止TextToSpeech在旋轉過程中停止

你必須知道,我使用兩種不同的風景/人像模式佈局。

我應該如何處理屏幕旋轉? 1)與android:configChanges="orientation|screenSize" //我不認爲這是最好的方式 2)用別的東西?

謝謝

回答

1

你基本上有兩個選擇:

1)手柄的方向改變自己。通常這很容易。你只需要實現onConfigurationChange(),在那裏你可以通過調用setContentView()來重建佈局。請注意,這將重新創建您的所有用戶界面視圖,因此您必須致電findViewById(),並重新爲所有需要跟蹤的視圖重置onClickListeners。

2)確保TTS實例在方向更改時不會關閉。您可以通過將TTS實例從活動的一個實例傳遞到下一個或將TTS實例跟蹤到靜態變量中來完成此操作(如果您這樣做,您需要確保在適當的時候在其上調用shutdown() ,而不是在你的活動onDestroy()

+0

使用選項#2,如果我沒有關閉onDestroy中的TTS實例,則即使用戶點擊後退按鈕以隱藏應用程序,TTS引擎仍會繼續說話。對? 並且在選項#1中,我不知道如何在再次調用setContentView()之後檢索用戶在EditText中輸入的內容。你現在可以幫我嗎? – 2013-03-20 00:50:00

+0

使用選項#1,您只需將所有來自視圖的用戶輸入保存在onPause()中。然後,在onResume()中,您只需將值複製回視圖。 – 2013-03-20 08:51:57

+0

它解決了,謝謝,但以不同的方式(與onConfigurationChanged)。然而,通過選項#1,我遇到了很多麻煩。例如,如果用戶正在鍵入內容並旋轉手機,則EditText不會直接獲得焦點,並且顯示的鍵盤將不會與新的EditText相匹配。 – 2013-03-20 09:02:27

2

有幾個步驟,以使TTS繼續工作在旋轉,而無需處理您的應用程序的配置更改的步驟包括:。

  • 充分利用TTS變量靜態

    private static TextToSpeech tts;

  • 只初始化一次,如果它是空

    if (tts == null) { ... }

  • 使用應用程序上下文

    tts = new TextToSpeech(getApplicationContext(), this);

這裏是我的實驗性應用的快照初始化TTS對象合併這些元素http://code.google.com/p/android-tts-experiments/source/detail?r=b879fd1042151cbebc736b89a9fb660c895081ea我已經設法在va上測試它rious Android設備和Android版本。有時候,TTS似乎在我的舊的,功能較弱的設備上稍微旋轉一下,但它繼續說出它給出的文本,並且排隊的消息保留在隊列中,並且一旦TTS引擎完全說完當前文本就說出來。