暗黙的インテント・ブロードキャストインテント

暗黙的インテントとブロードキャストインテントについてのメモ。

例)暗黙的インテント(jpegを送信するアクティビティを起動)

Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("image/jpeg");
intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("jpegファイルの場所"));
startActivity(intent);

Intentを使ってアプリを連携させる(暗黙的Intent) « Tech Booster

[Android] 暗黙的インテントでブラウザを起動させる

暗黙的Intentは明示的Intentと違い、曖昧なIntentを投げる。 どんなIntentを投げるのかはインテントのパラメータに設定する。

Androidは暗黙的Intentのパラメータから起動するActivityなどを決定して起動する。 どれを起動するかはマニフェストファイルのIntent Filterによって判定される。 Intent Filterに設定する項目は ACTION, CATEGORY, DATA の3つ。

明示的IntentではIntent Filterは関係しない。

参考: Intent について 4. インテントとインテントフィルタ - ソフトウェア技術ドキュメントを勝手に翻訳

暗黙的インテントを投げるアクティビティ

package jp.fernweh;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class Z098 extends Activity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent intent = new Intent();
    intent.setClassName("com.android.browser",
        "com.android.browser.BrowserActivity");
    startActivity(intent);
  }
}

マニフェストファイル

<activity android:name=".BarActivity" android:label="@string/app_name">
  <intent-filter>

    <!-- Intent.action.View は 指定したURLを見るアクション -->
    <action android:name="android.intent.action.VIEW" />

    <!-- 暗黙的Intentを受け取るActivityの おやくそく -->
    <!-- Intent.category.DEFAULTが無ければActivityは暗黙的Intentにより起動されない -->
    <category android:name="android.intent.category.DEFAULT" />

    <category android:name="android.intent.category.BROWSABLE" />

    <!-- 処理するデータは http スキーム -->
    <data android:scheme="http" />
  </intent-filter>
</activity>

暗黙的 Intent を受けるアクティビティ

BroadcastIntent

システムなどが全てのアプリケーションに発行するインテント。 これを受け取るにはBroadcastReceiverを実装したクラスが必要となる。

<receiver android:name=".FooBarBroadcastReceiver">
  <intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED" />
  </intent-filter>
</receiver>
package com.foobar;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class FooBarBroadcastReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context ct, Intent it) {
    Intent intent = new Intent(ct, FooActivity.class);
    // Activity以外からActivityを起動する場合は以下の一文が必要
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    ct.startActivity(intent);
  }
}
Share