web-dev-qa-db-ja.com

インテントフィルターとは正確には何ですか?

インテントフィルターに関する記事をたくさん読んだのですが、それらが何をしているのか正確に理解できませんか?

だから誰かが明確な例で私に説明できるなら、インテントフィルターの役割は正確には何ですか?

ありがとう

19
Mina Samy

私はそれが十分に文書化されていると思います ここ 。要約すると、(たとえば)Context.startActivityまたはContext.startServiceにインテントを渡すか、Context.sendBroadcastなどでブロードキャストする場合、インテントはどのアクティビティまたはサービス(またはブロードキャストレシーバーのセット)に配信されますか?

回答:インテントが「明示的」である場合、つまり、コンポーネント名フィールドが設定されている場合、指定されたターゲットコンポーネントに配信されます。これは通常、アプリケーション内の通信で発生します。

それ以外の場合(通信で一般的な「暗黙の」意図betweenアプリケーション)、Androidは、それ自体で最適なアクティビティまたはサービス(またはレシーバーのセット)を決定する必要があります。 Androidはどのようにそれを行うのですか?そこでフィルターが登場します。引用します:

これは、Intentオブジェクトのコンテンツを、インテントを受け取る可能性のあるコンポーネントに関連付けられた構造であるインテントフィルターと比較することによって行われます。フィルタは、コンポーネントの機能をアドバタイズし、処理できるインテントを区切ります。それらは、アドバタイズされたタイプの暗黙のインテントを受け取る可能性にコンポーネントを開きます。コンポーネントにインテントフィルタがない場合、コンポーネントは明示的なインテントのみを受け取ることができます。フィルタを備えたコンポーネントは、明示的インテントと暗黙的インテントの両方を受け取ることができます。

問題のWebページには多くの詳細が続き、最後に完全で単純な例があります。ここにそれらをコピーして貼り付けるのは冗長だと思います。

19
Alex Martelli

簡単に言うと、インテントフィルタは、アプリ内のさまざまなアクティビティ/サービス/ブロードキャストレシーバーを起動/通信する方法をOSに指示する方法です。したがって、たとえば、 http://www.mycompany.com で始まるリンクでユーザーをアプリに誘導したい場合は、インテントフィルターがそれを実現する方法です。セットアップが完了すると、(どのアプリでも)そのリンクで始まるリンクをクリックすると、アプリを使用してそのページを表示するオプションがユーザーに表示されます。あなたはおそらくこれをyoutubeのURLで見たことがあるでしょう。同様に、多くのアプリで一般的に見られる「共有」リンクにアプリを一覧表示させたい場合は、インテントフィルターを使用してそれを行います。

お役に立てれば...

5
Ben

インテントフィルター は、コンポーネントが処理できるデータまたはサービス要求をシステムに通知します。コンポーネントは、アクティビティ、サービス、またはブロードキャストレシーバーである可能性があります。

画像ビューアを作成している場合は、処理できる画像を説明するインテントフィルタ(または複数)をマニフェストに追加します。ファイルブラウザを作成している場合は、画像ファイルの詳細をインテントにパッケージ化すると、システムは、その画像を処理するのに最適なものが見つかるまで、インテントフィルタをふるいにかけます。あるコンポーネントから次のコンポーネントに渡される可能性のあるすべてのタイプのデータまたはサービスについても同じことが言えます。

4
drawnonward

インテントフィルターは、これらの種類のアクティビティ/サービスを処理/提供できるようにするOSに通知する方法です

マニフェストに特定のフィルターを追加することで、OSにSMSサービスも処理できることを通知し、SMSを送信するとリストに表示されるか、これをSMSサービスとして明示的に使用することもできます。

<intent-filter>

    <action Android:name="Android.intent.action.SENDTO" />

    <action Android:name="com.example.code.SMS_INTENT" />

    <category Android:name="Android.intent.category.DEFAULT" />

    <data Android:scheme="smsto" />

</intent-filter>

そして、このサービスを明示的に使用するには、次のように呼び出します...

 Intent intent = new Intent("com.example.code.SMS_INTENT", Uri.parse(uri));

 intent.putExtra("from", "code");

 startActivity(intent);
4
Xar E Ahmer

IntentFiltersは、宣言コンポーネントが応答するIntent属性のパターンを宣言するために使用されます。 IntentFilterを使用して、特定のアクティビティ、サービス、またはBroadcastReceiverがアクション、データmimeタイプ、スキーム、パスなどの組み合わせに応答するように指定できます。たとえば、データタイプが「text/plain」のACTION_SENDのIntentFilterにアクティビティを登録する場合"、ユーザーがテキストを送信するたびにアクティビティが呼び出されます。

3
ognian

intentFiltersは、コンポーネントの機能をアドバタイズし、処理できるインテントを区切ります。特定のアクティビティ、サービス、またはBroadcastReceiverがアクション、データmimeタイプ、スキーム、パスなどの組み合わせに応答するIntentFilter。

3つの側面に基づいてインテントとインテントフィルターを比較することによるインテント:

1:-意図的な行動
2:-インテントデータ(URIとデータ型の両方)
3:-インテントカテゴリ

アクション:
name属性で、受け入れられたインテントアクションを宣言します。値は、クラス定数ではなく、アクションのリテラル文字列値である必要があります。

データ:
データURIのさまざまな側面(スキーム、ホスト、ポート、パスなど)とMIMEタイプを指定する1つ以上の属性を使用して、受け入れられるデータのタイプを宣言します。

カテゴリ:
name属性で、受け入れられるインテントカテゴリを宣言します。値は、クラス定数ではなく、アクションのリテラル文字列値である必要があります。

たとえば、このアクティビティは、テキストデータを使用した「SEND」アクションを処理します。

<intent-filter>
    <action Android:name="Android.intent.action.SEND"/>
    <category Android:name="Android.intent.category.DEFAULT"/>
    <data Android:mimeType="text/plain"/>
</intent-filter>
3

インテントフィルターは、Androidシステムに、Androidコンポーネント(アクティビティ、サービス、ブロードキャストレシーバー)がリッスンするインテントまたはイベントを指示します。

0
BABU K