【问题标题】:Android pre onPause notificationAndroid pre onPause 通知
【发布时间】:2012-11-29 14:53:58
【问题描述】:

我正在使用 cocos2dx 将现有游戏从 ios 移植到 android。当应用程序暂停时,例如通过单击设备上的“锁定”按钮,应用程序正在暂停/休眠。但是当设备被重新激活并且我的应用程序再次出现时,它会冻结几秒钟。我想做的是显示一条游戏模式消息,告诉用户他/她应该等待一秒钟,直到游戏从冻结模式返回。但我可以简单地完成这项工作。

我尝试在“onPause”和“onResume”上显示消息,但直到冻结模式结束后才会显示消息,我希望在应用重新出现时显示消息。

我怎样才能做到这一点?

在 Ios 上,可以在应用程序进入后台之前收到通知。“applicationWillResignActive”我在 android 上找不到类似的东西。 Android 上是否存在诸如“pre-onPause”之类的通知/委托功能?

感谢任何想法。

最好的

【问题讨论】:

  • 在调用 super.onPause() 之前在 onPause() 中显示对话框有什么问题?
  • 冻结是什么意思?您是否在 onResume 中进行了一些重新初始化?

标签: android cocos2d-x 2d-games


【解决方案1】:

您可以创建一个 BroadcastReceiver 来侦听 SSCREEN_OFF 意图并在发生这种情况时显示您的对话框,这样当屏幕重新打开时它仍然存在。

public class ScreenReceiver extends BroadcastReceiver {
    /**
     * @see android.content.BroadcastReceiver#onReceive(Context,Intent)
     */
    @Override
    public void onReceive(final Context context, Intent intent) {

        if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
            //Put your Dialog showing code here
        }
    }
}

然后在您的活动中,您可以像这样实例化和注册您的接收器:

IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF);
BroadcastReceiver mReceiver = new ScreenReceiver();
registerReceiver(mReceiver, filter);

【讨论】:

  • 谢谢。直到 onPause 之后才会触发/调用它,我需要在调用 onPause 之前调用的东西。
【解决方案2】:

在 cocos2d-x 项目中 AppDelegate 类中有一个函数 applicationDidEnterBackground() ,它的停止动画就是冻结的全部内容,然后 AppDelegate::applicationWillEnterForeground() 是动画再次开始的函数,当你的应用程序需要时间时再次出现

所以在 applicationDidEnterBackground() 中放置对话框或说暂停屏幕,然后按照你想要的方式进行操作

我可以使用另一种方式,但它需要 JNI 调用 我所做的是我已经从 android 向 cocos2d-x 进行了 JNI 调用 .. 因为我需要所有 BroadcastReceiver 、 Battery Indicator 等...

所以每当这些事情发生时,我都会从我的 onPause 方法中调用 JNI,然后在 cocos2d-x 中调用 pauseScene

【讨论】:

  • 谢谢。当我告诉消息框显示时,当 applicationDidEnterBackground() - 或 onPause 时,它​​仍然不显示,直到应用程序从冻结模式返回。我假设 ccdirector 在从 Freeze(onResume 之后)返回之前不会更新/绘制。
  • @tomas :我想它应该可以工作..如果它的繁重进程 ccdirector 需要时间来更新......在恢复之后......但是你在 DidEnterBackground 中调用你的消息框......你在 stopAnimation() 之前调用它 ..... 这样只要它进入后台 nd 直到 ccdirector 停止所有渲染 nd 动画,你就会得到那个消息框,从前台来后你可以恢复 d 相同
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多