2013-03-19 71 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引擎完全说完当前文本就说出来。