putExtra() と setData() の違いは何ですか? Androidのドキュメントを読みましたが、あまり役に立ちません。また、以前の質問Intent.setData と Intent.putExtra がありますが、まだ明確ではありません。前もって感謝します。
4 に答える
setData()
このインテントが動作するデータを設定します。このメソッドは、setType(String) または setTypeAndNormalize(String) によって以前に設定されたタイプを自動的にクリアします。
注: Android フレームワークでのスキーム マッチングでは、正式な RFC とは異なり、大文字と小文字が区別されます。そのため、Uri は常に小文字のスキームで記述するか、normalizeScheme() または setDataAndNormalize(Uri) を使用してスキームが小文字に変換されるようにする必要があります。
パラメーター
data: このインテントが現在対象としているデータの Uri。
インテントは、特定のイベントが発生したことを Android システムに通知するために使用されます。インテントは多くの場合、実行する必要があるアクションを記述し、そのようなアクションを実行する必要があるデータを提供します。たとえば、アプリケーションは、特定の URL のブラウザー コンポーネントのインテントを介して開始できます。これを次の例で示します。
String url = "http://www.google.com";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
しかし、Android システムは、特定のインテントに反応できるコンポーネントをどのように識別するのでしょうか?
これには、インテント フィルターの概念が使用されます。インテント フィルターは、アクティビティ、サービス、またはブロードキャスト レシーバーが応答できるインテントのタイプを指定します。したがって、コンポーネントの機能を宣言します。
Android コンポーネントは、インテント フィルタを AndroidManifest.xml に静的に登録するか、ブロードキャスト レシーバの場合はコードを介して動的に登録します。インテント フィルターは、そのカテゴリ、アクション、およびデータ フィルターによって定義されます。追加のメタデータを含めることもできます。
インテントが Android システムに送信されると、Android プラットフォームは Intent オブジェクトに含まれるデータを使用して受信者の決定を実行します。これで、インテントのデータに登録されているコンポーネントが決定されます。複数のコンポーネントが同じインテント フィルターに登録されている場合、ユーザーはどのコンポーネントを開始するかを決定できます。
putExtra()
インテントに拡張データを追加します。
パラメータ:
name: 追加データの名前。
value: 文字列配列のデータ値。
複数の呼び出しを 1 つのステートメントにチェーンするために、同じ Intent オブジェクトを返します。
putExtra
プリミティブ (またはパーセル可能な) キーと値のペアを追加できます。setData
を渡すことに制限されていUri
ます。setData
startActivityForResult など、別のソースからデータを要求する場合に従来から使用されています。