Android onWindowFocusChanged()不';不要用假打电话,只有用真打电话
我有一个问题,在我的游戏中播放声音,而设备的显示器是在锁定屏幕上,如前所述。由于某些原因,我无法要求用户输入来恢复游戏,所以我希望捕获WindowFocusChanged事件以恢复游戏。不幸的是,所描述的解决方案在我的案例中不起作用 应用程序使用横向。AndroidManifest.xml:Android onWindowFocusChanged()不';不要用假打电话,只有用真打电话,android,android-lifecycle,Android,Android Lifecycle,我有一个问题,在我的游戏中播放声音,而设备的显示器是在锁定屏幕上,如前所述。由于某些原因,我无法要求用户输入来恢复游戏,所以我希望捕获WindowFocusChanged事件以恢复游戏。不幸的是,所描述的解决方案在我的案例中不起作用 应用程序使用横向。AndroidManifest.xml: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.application.applicationname"
android:versionCode="1"
android:versionName="1.0">
<supports-screens android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"/>
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="16"/>
<application android:label="@string/app_name"
android:debuggable="true"
android:icon="@drawable/icon">
<!-- main application activity -->
<activity android:name="com.application.applicationname.Activity"
android:label="@string/app_name"
android:screenOrientation="landscape"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:configChanges="orientation">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
但当我按下电源按钮锁定设备然后解锁时:
02-12 18:30:55.629: E/activity(22605): onPause called
02-12 18:30:55.629: E/activity(22605): onStop called
02-12 18:30:58.379: E/activity(22605): onDestroy called
02-12 18:30:58.839: E/activity(22605): onCreate called
02-12 18:30:58.839: E/activity(22605): onStart called
02-12 18:30:58.839: D/activity(22605): onResumeCalled
02-12 18:30:58.849: D/activity(22605): onPauseCalled
02-12 18:30:59.219: D/activity(22605): onResumeCalled
02-12 18:30:59.479: D/activity(22605): onPauseCalled
02-12 18:30:59.559: E/activity(22605): onStop called
02-12 18:34:01.899: E/activity(22605): onRestart called
02-12 18:34:01.899: E/activity(22605): onStart called
02-12 18:34:01.909: D/activity(22605): onResumeCalled
02-12 18:34:20.409: D/activity(22605): onPauseCalled
02-12 18:34:20.409: E/activity(22605): onStop called
02-12 18:34:20.409: E/activity(22605): onDestroy called
02-12 18:34:20.609: E/activity(22605): onCreate called
02-12 18:34:20.609: E/activity(22605): onStart called
02-12 18:34:20.609: D/activity(22605): onResumeCalled
02-12 18:34:20.769: D/activity(22605): onWindowFocusChanged called with focus = true
onWindowFocusChanged(false)从不调用,之前链接中描述的解决方案不起作用
另外,当设备处于锁定/解锁状态时,我有点担心会有很多调用onstroy/onCreate。据我所知,这是因为活动将其方向从横向(用于游戏)更改为纵向(用于设备锁定屏幕)并返回到横向。但是有了这样的破坏活动,就没有时间调用WindowFocusChanged(false)
所以,我的问题是:
UPD2关于对stroy/onCreate的多次调用:正如google Activity API中关于配置更改的内容所述,我曾尝试拦截显示方向的配置更改,但对我来说效果不佳 >第一个答案:您可以考虑处理Lunk/解锁屏幕事件的选项,而不是处理焦点更改:ANDROID.ItN.Action .Copyon on,Android。 这样,您可以注意到手机何时锁定/解锁,并处理声音问题
关于第二个问题,这可能与方向配置更改有关。也许你没有像Android所期望的那样处理这个事件,它试图扭转局面。但我不知道如何解决这个问题。我已经实现了如上所述的屏幕事件,但屏幕打开事件发生在打开屏幕之后和解锁显示之前。解锁显示器后是否有特殊意图?
02-12 18:30:55.629: E/activity(22605): onPause called
02-12 18:30:55.629: E/activity(22605): onStop called
02-12 18:30:58.379: E/activity(22605): onDestroy called
02-12 18:30:58.839: E/activity(22605): onCreate called
02-12 18:30:58.839: E/activity(22605): onStart called
02-12 18:30:58.839: D/activity(22605): onResumeCalled
02-12 18:30:58.849: D/activity(22605): onPauseCalled
02-12 18:30:59.219: D/activity(22605): onResumeCalled
02-12 18:30:59.479: D/activity(22605): onPauseCalled
02-12 18:30:59.559: E/activity(22605): onStop called
02-12 18:34:01.899: E/activity(22605): onRestart called
02-12 18:34:01.899: E/activity(22605): onStart called
02-12 18:34:01.909: D/activity(22605): onResumeCalled
02-12 18:34:20.409: D/activity(22605): onPauseCalled
02-12 18:34:20.409: E/activity(22605): onStop called
02-12 18:34:20.409: E/activity(22605): onDestroy called
02-12 18:34:20.609: E/activity(22605): onCreate called
02-12 18:34:20.609: E/activity(22605): onStart called
02-12 18:34:20.609: D/activity(22605): onResumeCalled
02-12 18:34:20.769: D/activity(22605): onWindowFocusChanged called with focus = true