概要
Intent
プロセス間で送受信するメッセージ。
URLとアクションの組み合わせを送ると任意のアプリが適当に処理してくれたり、もしくは特定アプリに向けたメッセージを送信したり、柔軟な使い方が可能
あと、Bundleできる情報ならputExtraで一緒に送れる。
setComponent(ComponentName component)した場合は、それにマッチするIntentReceiverだけがメッセージを受信できる。
IntentFilter
- IntentFilterを受け取る側が設定するフィルタ。
Context.registerReceiver
メインActivityのスレッドで実行されるIntentReceiverを登録する。受信機はフィルタにマッチするすべてのブロードキャストIntentと一緒に、メインアプリケーションのスレッドで呼び出される。
システムは"sticky"であるbroadcast Intentsを扱うかもしれない。これらはbroadcastが終わった後も残り、後から登録されたものに対して送られる。もしあなたのIntentFilterがこれらのsticky Intentsのひとつにマッチするなら、そのIntentはこの関数(registerReceiver)から返され、またbroadcastされた時にもあなたの受信機に送られる。複数のsticky Intents がフィルタにマッチするなら、そのそれぞれが受信機に送られる。この場合、この関数から返されるのはそのうちの一つだけである。どれが返されるかはシステムにより任意に決定される。
もしあなたが登録する目的のIntentがstickyであると分かっているなら、受信機にnullを指定してもよい。この場合受信機は登録されず、この関数は単にフィルタにマッチするstcky Intentを返す。ここで複数のIntentがマッチする場合、上で説明したのと同じルールが適用される。
使用例
この例はメッセージを異なるプロセス間で送受信する。
汎用的なactionではないなら、actionには他と衝突しないような名前をつけた方がいいだろう。
受信側
private IntentReceiver mDataReceiver = new IntentReceiver(){
@Override public void onReceiveIntent(Context context, Intent intent){
Log.d("hogeRecv","onReceiveIntent: "+intent);
}
};
private void registerDataReceiver(){
String action = "hogefuga";
IntentFilter filter = new IntentFilter(action);
Log.d("hogeRecv","filter="+filter);
this.registerReceiver(mDataReceiver,filter);
}
private void unregisterDataReceiver(){
unregisterReceiver(mDataReceiver);
}
送信側
Intent iMessage = new Intent(action);
iMessage.putExtra("message","loop="+loop);
Log.d("hogeSend",iMessage.toString());
broadcastIntent(iMessage);
最終更新:2007年11月16日 15:24