我修改了 SDK 演示中的蓝牙聊天示例,以便能够控制 arduino 供电的蓝牙 LED 矩阵。使用聊天程序,我可以通过蓝牙向显示器发送消息。但我有一个问题。我已经完成了两种屏幕布局,纵向和横向。这样我就可以让界面占据手机上的大部分空间,无论方向如何。
问题是,如果旋转手机,则会调用 OnDestroy() 来重新加载新布局(横向或纵向)。在 OnDestroy() 例程中,我还会销毁蓝牙链接(如果已建立):
public void onDestroy() {
super.onDestroy();
// Stop the Bluetooth chat services
if (mChatService != null)
mChatService.stop();
if (D)
Log.e(TAG, "--- ON DESTROY ---");
}
阅读此处的其他帖子,我发现您可以通过在清单中添加“android:configChanges=”orientation””来防止服务停止。这样做,当我旋转屏幕时,与显示器的蓝牙链接不再终止,但现在屏幕不会在横向模式下重新绘制。
为了解决这个问题,我正在考虑删除“if mchatservice...”部分,该部分将终止连接,但当应用程序最终退出时,我仍然需要运行代码。
有没有办法在旋转时重绘屏幕而不终止连接?如果没有,我想我总是可以将服务代码移至 OnPause() 事件,但是如果应用程序失去前景焦点,这将终止连接。
还有其他方法吗?
Thanks.
如果您将“android:configChanges="orientation"”添加到清单中以防止活动被销毁和重新创建,您可能需要实现该方法:
public void onConfigurationChanged(Configuration newConfig)
每次系统配置更改时(即,当您旋转手机并更改方向时)都会执行此方法。在此方法中,您可以为您的活动重新应用新的布局:
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Log.e(TAG, "ORIENTATION_LANDSCAPE");
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
Log.e(TAG, "ORIENTATION_PORTRAIT");
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)