暂停AIR-for-mobile应用程序的首选方法是什么?

时间:2013-02-22 11:38:40

标签: flash mobile air

我制作了Flash Air游戏。在播放时,如果我按下Android设备上的主页按钮,我会看到手机的菜单,但我仍然可以听到游戏的音乐,这意味着游戏仍然可以继续完全正常工作。

我希望我的应用程序在不在前台时暂停。我想到了这个:

...

        stage.addEventListener(flash.events.Event.DEACTIVATE, deactivated);

...

    private function deactivated(e:flash.events.Event):void {
        delayedCall = new DelayedCall(quitNow, 2 * 60);
        stage.addEventListener(flash.events.Event.ACTIVATE, reactivated);
    }
    private function quitNow():void {
        NativeApplication.nativeApplication.exit();
    }
    private function reactivated(e:flash.events.Event):void {
        stage.removeEventListener(flash.events.Event.ACTIVATE, reactivated);
        if (delayedCall) {
            delayedCall.dismiss();
            delayedCall = null;
        }
    }

...

其中DelayedCall是一个自定义的“wait-before-calling-this-function”类:

package fanlib.utils {
import flash.utils.Timer;
import flash.events.TimerEvent;

public class DelayedCall {

    private var data:*;
    private var callback:Function;
    private var timer:Timer;

    public function DelayedCall(callb:Function, seconds:Number, dat:* = undefined, count:int = 1) {
        callback = callb;
        data = dat;

        timer = new Timer(seconds * 1000, count);
        timer.addEventListener(TimerEvent.TIMER, timeEvent);
        timer.start();
    }

    public function dismiss():void {
        timer.stop();
        complete();
    }

    private function timeEvent(e:TimerEvent):void {
        if (data) callback(data); else callback();
        if (timer.currentCount == timer.repeatCount) complete();
    }

    private function complete():void {
        timer = null;
        data = undefined;
    }
}
}

上述方法适用于Air Desktop版本。当窗口失焦时,应用程序会在2 * 60秒后退出。

在Android上,行为非常奇怪:

  • delayCall
  • 永远不会调用quitNow()
  • 如果我删除“stage.addEventListener(flash.events.Event.ACTIVATE,reactivated);”,那么如果我在2 * 60秒之后回到它,应用程序将会关闭,但如果我不知道它将关闭回去吧!!!

这似乎是当应用程序不在前台时,操作脚本代码暂停,但无论如何都会播放音乐。

任何想法或更好,另类,直接证明的方式?我不打算深入了解Air和Android的内部运作......

1 个答案:

答案 0 :(得分:1)

在Android上,你可以听 NativeApplication 的DEACTIVATE&激活事件。当应用程序发送到后台时,将调用 handleApplicationDeactivated 。当它回来时,会调用 handleApplicationActivated 。希望这会有所帮助。

NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, handleApplicationDeactivated);
NativeApplication.nativeApplication.addEventListener(Event.ACTIVATE, handleApplicationActivated);