Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android onWindowFocusChanged()不';不要用假打电话,只有用真打电话_Android_Android Lifecycle - Fatal编程技术网

Android onWindowFocusChanged()不';不要用假打电话,只有用真打电话

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

我有一个问题,在我的游戏中播放声音,而设备的显示器是在锁定屏幕上,如前所述。由于某些原因,我无法要求用户输入来恢复游戏,所以我希望捕获WindowFocusChanged事件以恢复游戏。不幸的是,所描述的解决方案在我的案例中不起作用

应用程序使用横向。AndroidManifest.xml:

<?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)

所以,我的问题是:

  • 如何解决锁屏播放声音的原始问题
  • 是否可以不多次调用onDestroy/onCreate 谢谢你的关注

    UPD我已经从中实施了解决方案,并且在我的设备上都运行良好,但我不确定这个解决方案是否完全正确。在第一个环节:

    如果设备自行进入睡眠状态,或者用户锁定手机然后立即解锁,则您的应用程序可能根本不会收到任何焦点更改消息

    因此,我不确定在所有情况下都会调用onWindowFocusChanged(true)。这是可能的解决办法吗


    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