【初心者向け】Android アプリの基本:ブロードキャスト


ブロードキャストとは

  • 送り先を指定せず不特定多数の相手に投げるメッセージ。
  • ブロードキャストは インテントとして 投げられる。

サービスとは

  • UIをもたず、バックグラウンドで処理を実行するコンポーネント。

コンテンツプロバイダとは

  • 他アプリに対してアプリ内の データを公開するコンポーネント。
  • 公開できる主なデータは「DBテーブルデータ」「ファイルデータ」。

コンテンツリゾルバとは

  • コンテンツURIから Android システム内の対象となるコンテンツプロバイダを探し、そのプロバイダが提供するデータのアクセスを行う。

コンテントURIとは

  • コンテンツプロバイダが提供するデータを指し示すURI
  • 書き方:  content://{authority}/{path}

    • authority: プロバイダを識別するための名前。
      • プロバイダクラスの「完全修飾クラス名を小文字」にしたものを付けるのが推奨されている。 例) コンテンツプロバイダが「org.sample.MyProvider」 だった場合org.sample.myprovider  
    • プロバイダが提供するデータの中のどのデータなのかを識別する名前。
    • aaa/bbb/ccc のように階層形式で付けられ、各部分を「セグメント」という。
      例1) hoge テーブルの全レコード content://org.sample.myprovider/hoge
      例2) hoge テーブルの ID=10 のレコード content://org.sample.myprovider/hoge/10

インテントとは

  • Android システムに送る「何をしたいか」のメッセージ

インテントに設定できる情報

  1. 呼び出し対象を絞り込む条件 (必須)
    • コンポーネント名
    • アクション名
    • カテゴリ
    • データ
  2. 呼び出し対象に送るデータ
    • エクストラ
    • フラグ(インテントフラグ)

インデントの種類

  • 明示的インテント

    • 呼び出し対象を一意に指定するインテントのこと。
    • 絞り込み条件でいうと「コンポーネント名」を指定したインテント。
    • 例:アクティビティ名を指定しインテントを生成

      Intent intent = new Intent(context, FooActivity.class);
      
  • 暗黙的インテント

    • 呼び出し対象が必ずしも一意にならないインテントのこと。
    • 絞り込み条件でいうと「アクション名」「カテゴリ」「データ」を指定したインテント。
    • 例:アクション名とURIを指定してインテントを生成

      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com"));
      

インテントフラグとは

  • インテントによって起動されるアクティビティの起動方法を指定するもの

主要なインテントフラグ

  • FLAG_ACTIVITY_CLEAR_TOP
    • 起動するアクティビティが現在のスタック内に存在する時、そのアクティビティから上の全アクティビティをスタックから削除する。
  • FLAG_ACTIVITY_SINGLE_TOP
    • スタックの先頭が同じアクティビティの場合に新しくアクティビティを生成せず再利用
  • FLAG_ACTIVITY_NEW_TASK
    • 新しいタスクを作り、そのルートアクティビティとして起動
  • FLAG_ACTIVITY_MULTIPLE_TASK
    • new_taskと一緒に使用する
  • FLAG_ACTIVITY_NO_HISTORY"
    • タスクのスタックに保持されない。
    • ユーザが戻るボタンでこのフラグを指定したアクティビティに戻ってきた時、スタックに保存されていないため、結果的にスキップされる。

インテントフィルタとは

  • インテントの絞り込み条件(アクション、カテゴリ、データ)のヒット対象になるかをコンポーネントに定義したもの。
    (インテントを受けることができる「アクティビティ」「サービス」「ブロードキャストレシーバ」の3つのコンポーネントに設定できる。)
  • Android マニフェストの各コンポーネント定義 < activity >, < service >, < receiver > の子要素として定義する。

エクストラとは

  • 呼び出し対象に渡せる Bundle 形式のデータ。
  • Bundle クラス:キーと値のセットを保持するクラス(Map と似たようなもの)

エクストラの格納と取り出し方

  • データ格納する送信側

    // インテントのインスタンス生成する
    Intent intent = new Intent(this, FooActivity);
    // エクストラにデータを格納する
    intent.putExtra("key1", 10);
    intent.putExtra("key2", "abc");
    startActivity(intent);
    
  • データを取り出す受信側

    // インテントのエクストラからデータ取り出し
    int val1 = getIntent().getIntExtra("key1", 0);
    String val2 = getIntent().getStringExtra("key2");