Android 安卓:屏幕旋转、破坏和服务连接
我已经修改了SDK演示中的蓝牙聊天示例,以便能够控制arduino供电的蓝牙LED矩阵。使用聊天程序,我可以通过蓝牙向显示屏发送信息。不过我有个问题。我做了两个屏幕布局,一个是肖像画,一个是风景画。这样,无论方向如何,我都可以让界面占据手机上的大部分空间 问题是,如果手机旋转,将调用OnDestroy(),以重新加载新布局(横向或纵向)。在OnDestroy()例程中,如果建立了蓝牙链接,我也会破坏它:Android 安卓:屏幕旋转、破坏和服务连接,android,rotation,screen,ondestroy,Android,Rotation,Screen,Ondestroy,我已经修改了SDK演示中的蓝牙聊天示例,以便能够控制arduino供电的蓝牙LED矩阵。使用聊天程序,我可以通过蓝牙向显示屏发送信息。不过我有个问题。我做了两个屏幕布局,一个是肖像画,一个是风景画。这样,无论方向如何,我都可以让界面占据手机上的大部分空间 问题是,如果手机旋转,将调用OnDestroy(),以重新加载新布局(横向或纵向)。在OnDestroy()例程中,如果建立了蓝牙链接,我也会破坏它: public void onDestroy() { super.onD
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()事件,但是如果应用程序失去焦点,这将终止连接
还有别的办法吗
谢谢。如果您将“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");
}
}
要添加到@alex.veprix(我必须指出这是正确的)答案,如果您正在为API级别为13或更高的设备进行构建,请不要忘记按以下方式添加屏幕大小属性:
android:configChanges=“orientation | ScreenSize”
此处的详细信息:建议使用一个TaskFragment来处理您的逻辑,然后对您的活动进行一些回调以与UI同步
有关详细说明,请参见以下网站:Awesome。在谷歌上搜索了一个小时后,我发现了类似的东西,但你的答案更详细(有助于记录),我最后也添加了这个:
setContentView(R.layout.main)代码>谢谢!