BREW センタープッシュ (SMS) により BREW アプレットを起動するには …
BREW センタープッシュ (SMS) による BREW アプレットの起動は、SFEVT_APP_MESSAGE (EVT_APP_MESSAGE) イベントを受信し、そのイベントハンドラの中で目的とする BREW アプレットを起動することにより実現可能です。
このとき、SFEVT_APP_MESSAGE (EVT_APP_MESSAGE) イベントは、標準トレーサに「配信条件:なし」の配信ルールで登録されていますので、ルートを含めレスポンダに配信されません。
このイベントは、『標準トレーサに「配信条件:なし」で配信規則が登録されているイベントの取得方法』にあるように、アプリケーションクラスのコンストラクタ内でSFYDistributer から受信します。
SFEVT_APP_MESSAGE (EVT_APP_MESSAGE) イベントのハンドラでは、目的とする BREW アプレットを起動する処理を記述します。
□サンプルコードダウンロード( smsdemosf.zip: 7.93kb )
// コンストラクタ
smsdemosf::smsdemosf(Void) static_throws
{
// 開始イベントのハンドラを登録します。
if (static_try()) {
static_throw(RegisterHandler(
SFXEventRange(SFEVT_APP_START, SFEVT_APP_START, SFP16_BEGIN, SFP16_END),
XANDLER_INTERNAL(OnAppStart)
));
}
// 描画イベントのハンドラを登録します。
if (static_try()) {
static_throw(RegisterHandler(
SFXEventRange(SFEVT_RESPONDER_RENDER, SFEVT_RESPONDER_RENDER, SFP16_RENDER_REQUEST, SFP16_RENDER_REQUEST),
XANDLER_INTERNAL(OnRenderRequest)
));
}
// SMS メッセージイベントのハンドラを "配信クラス" に登録します。
if (static_try()) {
SFYDistributerPtr distributer = GetDistributer();
if (distributer != null) {
static_throw(distributer->RegisterHandler(
SFXEventRange(SFEVT_APP_MESSAGE, SFEVT_APP_MESSAGE, SFP16_BEGIN, SFP16_END),
XANDLER_INTERNAL(OnAppMessage)
));
}
}
}
// 開始ハンドラ
XANDLER_IMPLEMENT_VOIDSTART(smsdemosf, OnAppStart, invoker, environment)
{
// 未使用変数のワーニングを回避します。
unused(invoker);
// ここにアプリケーション開始時の処理を記述します。
// 起動引数から SMS メッセージを取り出します。
_message = environment->pszArgs;
// 再描画を要求します。
Invalidate();
return;
}
// 描画ハンドラ
XANDLER_IMPLEMENT_VOIDRENDER(smsdemosf, OnRenderRequest, invoker, reason, graphics)
{
// 未使用変数のワーニングを回避します。
unused(invoker);
unused(reason);
// ここに描画時の処理を記述します。
// 画面にメッセージを描画します。
graphics->DrawSingleText(_message.GetCString(), GetLocalBound(), SFXRGBColor(0x00, 0x00, 0x00, 0x00));
return;
}
// SMS メッセージ ハンドラ
XANDLER_IMPLEMENT_VOIDEVENT(smsdemosf, OnAppMessage, invoker, event)
{
// 未使用変数のワーニングを回避します。
unused(invoker);
// ここに SMS メッセージ受信時の処理を記述します。
TRACE("## SFEVT_APP_MESSAGE ##");
if (event.GetP32() != null) {
ACharConstPtr message;
message = reinterpret_cast<ACharConstPtr>(event.GetP32());
// SMS メッセージを表示
TRACE("## SMS Message = %s ##", message);
SFBShellSmp shell;
if ((shell = SFBShell::GetInstance()) != null) {
// メッセージをアプリケーションの起動引数として渡します。
if (shell->StartAppletArgs(AEECLSID_SMSDEMOSF, message) != SFERR_NO_ERROR) {
// 起動失敗時のエラー処理を記述します
// ...
}
}
}
return;
}









