我的应用正在实施运行良好的文本转语音。但是当我转动手机时,听写会自动停止。
你必须知道我对横向/纵向模式使用了两种不同的布局。
我应该如何处理屏幕旋转?1) 使用android:configChanges="orientation|screenSize"
// 我认为这不是最好的方法 2) 使用其他方法?
谢谢
我的应用正在实施运行良好的文本转语音。但是当我转动手机时,听写会自动停止。
你必须知道我对横向/纵向模式使用了两种不同的布局。
我应该如何处理屏幕旋转?1) 使用android:configChanges="orientation|screenSize"
// 我认为这不是最好的方法 2) 使用其他方法?
谢谢
有几个步骤可以使 TTS 继续进行轮换工作,而无需处理应用程序中的配置更改。这些步骤包括:
将 TTS 变量设为静态
private static TextToSpeech tts;
只初始化一次,如果它为空
if (tts == null) { ... }
使用应用程序上下文初始化 TTS 对象
tts = new TextToSpeech(getApplicationContext(), this);
这是我的实验应用程序的快照,其中包含这些元素http://code.google.com/p/android-tts-experiments/source/detail?r=b879fd1042151cbebc736b89a9fb660c895081ea我已经设法在各种 android 设备和 android 版本上对其进行了测试. 有时,TTS 似乎在我较旧、功能较弱的设备上轮换时稍有犹豫,但它会继续说出它要说的文本,并且排队的消息会保留在队列中,一旦当前文本被 TTS 引擎完全说出,它就会说出.
你基本上有2个选择:
1)自己处理方向变化。通常这很容易。你只需要实现onConfigurationChange()
,在那里你可以通过调用来重建布局setContentView()
。请注意,这将重新创建您的所有 UI 视图,因此您必须findViewById()
再次调用并重置 onClickListeners 以获取您需要跟踪的所有视图。
2) 确保 TTS 实例不会因方向更改而关闭。您可以通过将 TTS 实例从一个活动实例传递到下一个活动实例来执行此操作,或者在静态变量中跟踪 TTS 实例(如果这样做,您需要确保shutdown()
在适当的时间调用它,不在onDestroy()
您的活动范围内。