アプリケーションはアプリケーションのさまざまなコンポーネントに対して同じインテント フィルタを定義できるため、インテントが同じアプリケーションの複数のコンポーネントに一致する可能性が非常に高くなります。だとしたらどうなるでしょうか?エラーは発生しますか?
2 に答える
だとしたらどうなるでしょうか?
を参照していると仮定すると、startActivity()
一致するデバイス上の他のアクティビティとともに、アプリからの一致するすべてのアクティビティがセレクターに表示されると思います。
エラーは発生しますか?
おそらくそうではありません。ただし、あなたが説明していることは非常に珍しいことに注意してください。通常、アプリケーションは特定のIntent
構造に応答するために必要なアクティビティは 1 つだけです。
最も適切なインテント フィルターがインテントをキャッチします。ドキュメントから:
暗黙のインテントには別の戦略が必要です。指定されたターゲットがない場合、Android システムはインテントを処理するのに最適なコンポーネント (複数可) を見つける必要があります。つまり、要求されたアクションを実行する単一のアクティビティまたはサービス、またはブロードキャスト アナウンスに応答する一連のブロードキャスト レシーバーです。これは、Intent オブジェクトのコンテンツをインテント フィルター (インテントを受け取る可能性のあるコンポーネントに関連付けられた構造) と比較することによって行われます。フィルターは、コンポーネントの機能を通知し、処理できるインテントを区切ります。コンポーネントは、通知されたタイプの暗黙的なインテントを受け取る可能性があります。コンポーネントにインテント フィルタがない場合、明示的なインテントのみを受け取ることができます。フィルターを持つコンポーネントは、明示的インテントと暗黙的インテントの両方を受け取ることができます。
...
フィルタには、Intent オブジェクトのアクション、データ、およびカテゴリ フィールドに対応するフィールドがあります。暗黙的インテントは、3 つの領域すべてでフィルターに対してテストされます。フィルターを所有するコンポーネントに配信するには、3 つのテストすべてに合格する必要があります。それらの 1 つでも失敗した場合、Android システムはそれをコンポーネントに配信しません (少なくともそのフィルターに基づいていない)。ただし、コンポーネントは複数のインテント フィルターを持つことができるため、コンポーネントのフィルターの 1 つを通過しないインテントが別のフィルターを通過する可能性があります。
要するに、エラーは発生しません。システムはインテントに最も一致するものを見つけようとしますが、これにはユーザーが関与する場合があります (新しいブラウザーをインストールするときのことを考えてください)。