Package version 12
Android
StartServiceForResultメソッドで発行したインテントに対し、戻り値を受けた時に発生するイベントです。
ServiceResultイベントは以下の構造をもちます。
Event { Number ResultCode; /* サービスの戻り値が格納されます */ Intent ResultData; /* サービスの追加の戻り値(android.os.Bundle)をIntentオブジェクトにラップした物が格納されます。 */ }
本イベントは、呼び出し側サービス上でStartServiceForResultメソッドの第一引数で指定された、android.os.ResultReceiverオブジェクトのsend(int resultCode, Bundle resultData)メソッドが呼ばれたときに発生します。
ResultCode, ResultData子オブジェクトは、それぞれ、ResultReceiver.send(int resultCode, android.os.Bundle resultData) メソッドの第一引数、第二引数に相当します。
上記メソッドの第二引数(resultData)がnullの場合、ResultData子オブジェクトは空のIntentオブジェクトとなります。
サービスの戻り値の有無やどのような値が格納されているかについては呼び出し先サービスによって異なりますため、詳細については呼び出し先サービスの仕様をご確認ください。
ServiceResultイベントは呼び出し先サービスが適切な戻り値を返した場合に発生します。
そのため、呼び出し先サービスが値を返さなかったり強制終了したりした場合、イベントが発生しない可能性があります。
よって、ServiceResultイベントが確実に起こることを前提としたコードは記述しないようご注意ください。
Intentオブジェクトがオブジェクトツリーに含まれない場合は、イベントハンドラの記述には注意が必要です。
オブジェクトツリーに含まれないオブジェクトから他のオブジェクトを参照する場合、グローバルオブジェクト、"//"からの絶対パス、自オブジェクトの子オブジェクトのみ、参照できます。
オブジェクトツリーに含まれない記述例
var i = new Intent { Function OnServiceResult(e) { /* Intentオブジェクトはオブジェクトツリーに含まれないため */ /* ここでは相対パスによる他のオブジェクトの参照はできない */ } } /* …インテントに適切な値を設定… */ i.StartServiceForResult("RESULT_RECEIVER_EXTRA_NAME");
オブジェクトツリーに含まれる記述例
Intent i { Function OnServiceResult(e) { /* Intentオブジェクトはオブジェクトツリーに含まれるため */ /* ここでも相対パスによる他のオブジェクトの参照ができるが */ /* 使用後に削除しない限り永続的にオブジェクトが残る */ } } /* …インテントに適切な値を設定… */ i.StartServiceForResult("RESULT_RECEIVER_EXTRA_NAME");