暗黙のIntentを投げてみたを参考に暗黙のIntentを投げてみた

Intentとして使ってもらうことをいろいろ考えてみようとしていますが、それ以前にIntentが理解できていない。
id:minghai:20090316 参照。マジで助かったです。

ためしのコード

まずは、気付いたところ。

  • ActivityはIntentの派生型になってる。
  • アプリケーションの起動もIntentの仕組みを使ってるみたい。
呼ばれる側: おれおれスキーマでActivityが上がるようにする

AndroidManifest.xml

  <application ...>
    <activity ...>
      ...
      <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:scheme="foobar" />
      </intent-filter>
    </activity>
  </application>

てのを追加。
これで、uriが"foobar:"のデータを指定したインテントを探索しようとすると、このActivityが上がるようになります。

呼ぶ側: おれおれスキーマを呼び出す

コードで

  Intent intent = new Intent(Intent.ACTION_VIEW);
  intent.setData(Uri.parse("foobar:?text=foobar"));
  startActivity(intent);

というのを書く。

呼ばれる側: データを取得するコード

コードで

  Intent thisIntent = this.getIntent();
  if( thisIntent != null ) {
    Uri uri = thisIntent.getData();
    if( uri != null ) {
      Log.d("IR",uri.toString();
    }
    else {
      Log.d("IR","cannot get uri");
    }
  }

ていうのを書く。
(自分のコードではTextViewに出すようにしていますが)

呼ばれる側Activityのライフサイクル

Intentから派生させていますので、普通のActivityと同じです。

  • 呼んだ時は
    • 呼ばれる側Activityを持つプロセスが無いなら新プロセスが上がります。
    • 呼ばれる側Activityを持つプロセスがあるなら、これを利用します。
    • どちらにしてもonCreateが呼ばれます。
  • Activityを閉じても明示的に終了させない限りプロセスは生き残ります。