我需要解决以下问题:
从 UnityPlayerNativeActivity
我开始一个标准的 Android Activity (可能是我的,可能是来自广告网络的广告 - 没关系)。当通过按 home
按钮隐藏游戏并将此 Activity 隐藏在顶部(不是 Unity Activity )时,作为用户,我有两种恢复它的方法:
- 从
最近使用的应用程序
屏幕 - 应用程序正在恢复到最小化时的相同状态(这是我期望发生的情况); - 在启动器中,导致游戏
UnityPlayerNativeActivity
的原因正在恢复,但丢失了在其上打开的所有其他 Activity 。
这些 Activity 以某种方式丢失了(以一种我不完全知道的方式,它们发生了什么)。我的游戏逻辑取决于那里发生的过程的结果,即。我需要知道,此特定 Activity 已以任何特定方式退出(例如提供回调)。
你知道我如何将这个 Unity Activity 从启动器带回它上面的所有 Activity ,就像最小化它一样吗?
我想了解从 Recently used screen
和启动器恢复应用程序的方式之间的区别。我猜它与 AndroidManifest.xml
文件中的 intent-filter 部分有关,该文件包含在 UnityPlayerNativeActivity
条目中。
最佳答案
结果证明解决方案非常简单,但不是那么明显。
事实证明,Unity 默认生成的 AndroidManifest.xml
配置导致了这个问题。对于从启动器启动的主要 Activity ,定义了以下参数(取自反编译的应用程序):
<activity
android:alwaysRetainTaskState="true"
android:clearTaskOnLaunch="true"
android:configChanges="locale|fontScale|keyboard|keyboardHidden|mcc|mnc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|touchscreen|uiMode"
android:label="@string/app_name"
android:launchMode="singleTask"
android:name="com.unity3d.player.UnityPlayerNativeActivity"
android:screenOrientation="fullSensor"
launchMode="singleTask">
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true"/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
<category android:name="android.intent.category.LEANBACK_LAUNCHER"/>
</intent-filter>
</activity>
问题行为是由这两个参数引起的:
android:clearTaskOnLaunch="true"
android:launchMode="singleTask"
当我将它们更改为:
android:clearTaskOnLaunch="false"
android:launchMode="standard"
然后应用程序从启动器正常恢复。
正确的参数应该设置如下:
<activity
android:alwaysRetainTaskState="true"
android:clearTaskOnLaunch="false"
android:configChanges="locale|fontScale|keyboard|keyboardHidden|mcc|mnc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|touchscreen|uiMode"
android:label="@string/app_name"
android:launchMode="standard"
android:name="com.unity3d.player.UnityPlayerNativeActivity"
android:screenOrientation="fullSensor"
launchMode="standard">
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true"/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
<category android:name="android.intent.category.LEANBACK_LAUNCHER"/>
</intent-filter>
</activity>
注意:虽然我可以为这个 Activity 显式设置值 android:clearTaskOnLaunch="false"
,但是 launchMode
参数将被 Unity3d 强制设置为 "singleTask"
。我设法通过反编译应用程序并从这些更改的资源中重建来更改和检查它。我想知道是否有任何优雅的方式来设置这个值。
关于android - 使用顶部的另一个 Activity 恢复 Unity3d Android 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31611670/