我制作了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上,行为非常奇怪:
这似乎是当应用程序不在前台时,操作脚本代码暂停,但无论如何都会播放音乐。
任何想法或更好,另类,直接证明的方式?我不打算深入了解Air和Android的内部运作......
答案 0 :(得分:1)
在Android上,你可以听 NativeApplication 的DEACTIVATE&激活事件。当应用程序发送到后台时,将调用 handleApplicationDeactivated 。当它回来时,会调用 handleApplicationActivated 。希望这会有所帮助。
NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, handleApplicationDeactivated);
NativeApplication.nativeApplication.addEventListener(Event.ACTIVATE, handleApplicationActivated);