タグ : event

airforandroidにおける起動/終了時、sleep状態からIn,Outするときのイベント

airforandroidにおけるOS側の発信や起動終了時のイベントを受け取る処理は下のような感じです。

package
{
	import flash.events.*;
	import flash.display.Sprite;
	import flash.desktop.NativeApplication;

	public class Main extends Sprite{
		var na:NativeApplication = NativeApplication.nativeApplication;
		public function Main() {

			//起動時に発生するイベント
			na.addEventListener(InvokeEvent.INVOKE, invokeHandler);
			//既に起動していて他のアプリからフォーカスが戻ってきた時のイベント
			//(デバイスがsleepからもどるとき)
			na.addEventListener(Event.ACTIVATE, activateHandler);
			//他のアプリにフォーカスが移った時のイベント(デバイスがsleepになるとき)
			na.addEventListener(Event.DEACTIVATE, deactivateHandler);
			//アプリ終了時に送出されるイベント
			na.addEventListener(Event.EXITING, exitHandler);

			stage.addEventListener(MouseEvent.CLICK, appExitHandler);
		}

		private function invokeHandler(e:InvokeEvent):void {
			trace("invoke");
		}
		private function activateHandler(e:Event):void {
			trace("activate");
		}
		private function deactivateHandler(e:Event):void {
			trace("deactive");
		}
		private function exitHandler(e:Event):void {
			trace("exit");
		}
		private function appExitHandler(e:MouseEvent):void {
			//アプリを終了する。
			na.exit();
		}
	}
}

※起動時のInvokeを受け取るとき同時にパラメータを受信することもできるようです。
つまりアプリ起動時に指定の画面から始めたり、任意の初期値を持って起動するといったことが可能です。
詳細はこちら(android forum)

StageOrientationEvent 画面の向きが変わった時の処理について

[この記事はベータ版(2010/09/23版)でしか確認をとれていません。正式リリース後に変更されている可能性もありますので参考程度にご覧ください。]

デバイスを横に向けたり、縦に向けたりしたときにStageOrientationEventでイベントを受け取ることが出来ます。

プロパティのbeforeOrientation,afterOrientationを使って変化前,変化後の状態を取得することができました。
今のところよくわかっていませんが、手元のNexusOneでは状態が3種類あり、

  • default
  • rotatedRight
  • rotatedLeft

の3種類の状態が検知できました。
FlashCS5のairforandroid書き出しプラグインはデフォルトの設定portraitになっているので検出をアクティブにする為には、パブリッシュの設定を下の画像の赤い箇所を変更する必要があると思います。

検出用のサンプルスクリプトは以下になります。

package
{
	import flash.display.Sprite;
	import flash.events.StageOrientationEvent;
	import flash.text.TextField;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;

	import caurina.transitions.Tweener;

	public class Main extends Sprite
	{
		var txt:TextField;
		var sp:Sprite;

		public function Main()
		{
			stage.scaleMode = StageScaleMode.NO_SCALE;
			stage.align = StageAlign.TOP_LEFT;

			txt = new TextField();
			txt.autoSize = "left";
			txt.text = "orientation start \n";
			addChild(txt);

			sp = new Sprite();
			sp.graphics.beginFill(0xFF0000,0.2);
			sp.x = sp.y = 10;
			sp.graphics.drawRect(0, 0,
					stage.stageWidth - 100, stage.stageHeight - 100);
			addChild(sp);

			stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE,
									onOrientationChange);
		}

		private function onOrientationChange(e:StageOrientationEvent):void {

			//.beforeOrietationはデバイスの向き変化前の状態をgetできます。
			txt.appendText("beforeOrientation : " + e.beforeOrientation + "\n");
			//.afterOrientationはデバイスの向き変化後の状態をgetできます。
			txt.appendText("afterOrientation : " + e.afterOrientation + "\n\n");

			Tweener.addTween(sp, {
				width:stage.stageWidth - 100,
				height:stage.stageHeight - 100,
				time:1,
				transition:"linear"
			} );

		}
	}
}