0

FlashAirゲームを作りました。再生中に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;
    }
}
}

上記の方法は、AirDesktopバージョンで問題なく機能します。ウィンドウの焦点が合わなくなると、アプリは2*60秒後に終了します。

Androidでは、動作は非常に独特です。

  • quitNow()がdelayedCallによって呼び出されることはありません
  • 「stage.addEventListener(flash.events.Event.ACTIVATE、reactivate);」を削除すると、2 * 60秒後にアプリに戻るとアプリは閉じますが、取得しないとアプリは閉じません。それに戻る!!!

これは、アプリがフォアグラウンドにない場合にActionscriptコードが一時停止するように見えますが、音楽はとにかく再生されます。

何かアイデア以上の、代替の、簡単な証明された方法はありますか?AirとAndroidの内部動作を掘り下げるつもりはありません...

4

1 に答える 1

1

Androidでは、 NativeApplicationのDEACTIVATEおよびACTIVATEイベントを聞くことができます。アプリケーションがバックグラウンドに送信されると、 handleApplicationDeactivateが呼び出されます。そして、戻ってくると、handleApplicationActivatedが呼び出されます。お役に立てれば。

NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, handleApplicationDeactivated);
NativeApplication.nativeApplication.addEventListener(Event.ACTIVATE, handleApplicationActivated);
于 2013-02-23T13:51:51.617 に答える