Palm Programmer's Laboratory
Palm OS Programmer's Companion Volume I/2-3
2-3 プログラムからのアプリケーション起動
アプリケーションは互いに起動コードを送ることができます。つまり、アプリケーションは他のアプリケーションまたはシステムから起動されるということになります。アプリケーションは、相手のアプリケーションになんらかのアクションを起こさせたりデータを変更させるために起動コードを使用することができます。例えば、データコレクションアプリケーションが電子メールアプリケーションに対して送信メッセージをキューに追加するように指示することもできます。
- TIP
- Palm OS 4.0 以降では、他にもアプリケーション間の通信手段が用意されています。どの方法を使用するべきかについては、「 ヘルパー API を使用する場合 」 を参照して下さい。
他のアプリケーションに起動コードを送るのは、対象のアプリケーション内の特定のサブルーチンを呼び出すようなものです。つまり、起動コードに応答するアプリケーションは、パラメータとしてスタック上に与えられた起動コードの定数値に対して何をするかを決定する責任があります。
他のアプリケーションに起動コードを渡すには、システムマネージャ関数 SysAppLaunch を使用します。他のアプリケーションの機能を利用し、終了後システムの制御を自分のアプリケーションに戻したい場合にこのルーチンを使用します。通常、アプリケーションはユーザーインターフェースを持つ他のアプリケーションに起動コードを送るためだけにこの関数を使用します。
例えば、この関数を使用することで、組込みのアドレス帳アプリケーションに特定の電話番号をそのデータベースから検索させ、検索結果を返させることもできます。SysAppLaunch を呼び出す時は起動フラグをセットしないで下さい ── SysAppLaunch 関数自身が適切な起動フラグを設定してくれます。
より簡単に起動コードを送信する別の方法として、SysBroadcastActionCode 関数があります。この関数は自動的に全てのユーザーインターフェースアプリケーションを検索し、それぞれに SysAppLaunch コールして起動コードを送信してくれます。
SysAppLaunch でアプリケーションが呼び出された場合、ユーザーの目にはアプリケーションが切り換わったように見えなくても、システムは呼び出されたアプリケーションがカレントアプリケーションであるとみなします。そのため、アプリケーションが他のアプリケーションから呼び出された場合でも、SysCurAppDatabase 関数を使用することで自分のデータベースのカードナンバーとデータベースIDを取得することができます。
アプリケーションを終了して他のアプリケーションを起動したい場合、SysAppLaunch のかわりに SysUIAppSwitch 関数を使用します。この関数はシステムに対して次に起動すべきアプリケーションを通知した後、イベントキューにアプリケーション終了イベントを追加します。アプリケーションが終了イベントに応答して終了すると、システムは次のアプリケーションを起動します。
パラメータブロックをアロケートして SysUIAppSwitch に渡す場合、MemPtrSetOwner をコールしてパラメータブロックチャンクの所有権を OS に明け渡す必要があります(最初はアロケートしたアプリケーションが所有権を持っています)。もしパラメータブロックの構造体が他のチャンクを指すポインタかハンドルを参照している場合、MemPtrSetOwner や MemHandleSetOwner を使用してそれらのチャンクの所有権も変更する必要があります。パラメータブロックの所有権を変更しないと、起動したアプリケーションが参照する前に開放されてしまうでしょう。
Palm OS 3.0 以降では、アプリケーションランチャを使用してアプリケーションを起動することもできます。詳細については、「 4 ユーザーインターフェース 」 の“アプリケーションランチャ” を参照して下さい。
- WARNING!
- アプリケーションランチャであるようなアプリケーションを起動するのに SysUIAppSwitch や SysAppLaunch を使用しないで下さい。