Intentを処理するためのアクティビティが見つからないことに関するAndroidの質問
2022-02-22 13:02:03
Androidには、明示的と暗黙的の2種類のIntentがあります。
Intentオブジェクトの構築時に受信者が指定されるExplicit Intent。
Implicit Intent, ここでIntentの送信者はIntentオブジェクトの構築時に受信者を指定する。
は、受信者が誰であるかを知らないし、気にしないので、送信者と受信者の間の結合を減らすことができる。
明示的なIntentの場合、ターゲットとなるコンポーネントがすでに明確に定義されているため、Androidはパース処理を行う必要がありません。
Implicit Intentは、Androidにパースを要求することで、このIntentを処理できるActivity、IntentReceiver、ServiceにIntentをマッピングします。
Intentの解析機構は、主にAndroidManifest.xmlに登録されている全てのIntentFilterとその中で定義されているIntentを探し出し、最終的にマッチするIntentを探し出すというものである。
このパース処理において、AndroidはIntentのaction、type、categoryの属性を用いて判定を行うが、これは以下のように行われる。
1 Intentがアクションを指定する場合、そのアクションはターゲットコンポーネントのIntentFilterのアクションリストに含まれていなければならず、そうでない場合はマッチングされない。
2 Intentが型を提供しない場合、システムはdataからデータ型を取得する。アクションと同様に
ターゲットコンポーネントのデータ型のリストには、Intentのデータ型が含まれていなければなりません。そうでなければ、マッチングできません。
3 インテントのデータが content: 型の URI でなく、インテントが明示的にその型を指定しない場合。
は、Intent 内のデータをそのスキーム (http: や mailto: など) に従ってマッチさせます。
上記と同様に、Intentのスキームは、ターゲットコンポーネントのスキームリストに表示されなければなりません。
4 インテントが1つ以上のカテゴリーを指定する場合、これら全てのカテゴリーが形成されたカテゴリーリストに表示されなければならない。
例えば、Intentが2つのカテゴリを含む場合。LAUNCHER_CATEGORY と ALTERNATIVE_CATEGORY の2つのカテゴリがある場合。
解析されたターゲットコンポーネントは、少なくともこれら2つのカテゴリを含んでいなければなりません。
startActivity()メソッドで送信されるすべての暗黙のIntentは、少なくとも1つのカテゴリを持ち、それは"android.intent.category.DEFAULT"です。
したがって、暗黙のIntentを受信したいActivityは、"android.intent.category.DEFAULT"カテゴリを含める必要があり、さもなければIntentが一致しない原因となります。
Intentオブジェクトの構築時に受信者が指定されるExplicit Intent。
Implicit Intent, ここでIntentの送信者はIntentオブジェクトの構築時に受信者を指定する。
は、受信者が誰であるかを知らないし、気にしないので、送信者と受信者の間の結合を減らすことができる。
明示的なIntentの場合、ターゲットとなるコンポーネントがすでに明確に定義されているため、Androidはパース処理を行う必要がありません。
Implicit Intentは、Androidにパースを要求することで、このIntentを処理できるActivity、IntentReceiver、ServiceにIntentをマッピングします。
Intentの解析機構は、主にAndroidManifest.xmlに登録されている全てのIntentFilterとその中で定義されているIntentを探し出し、最終的にマッチするIntentを探し出すというものである。
このパース処理において、AndroidはIntentのaction、type、categoryの属性を用いて判定を行うが、これは以下のように行われる。
1 Intentがアクションを指定する場合、そのアクションはターゲットコンポーネントのIntentFilterのアクションリストに含まれていなければならず、そうでない場合はマッチングされない。
2 Intentが型を提供しない場合、システムはdataからデータ型を取得する。アクションと同様に
ターゲットコンポーネントのデータ型のリストには、Intentのデータ型が含まれていなければなりません。そうでなければ、マッチングできません。
3 インテントのデータが content: 型の URI でなく、インテントが明示的にその型を指定しない場合。
は、Intent 内のデータをそのスキーム (http: や mailto: など) に従ってマッチさせます。
上記と同様に、Intentのスキームは、ターゲットコンポーネントのスキームリストに表示されなければなりません。
4 インテントが1つ以上のカテゴリーを指定する場合、これら全てのカテゴリーが形成されたカテゴリーリストに表示されなければならない。
例えば、Intentが2つのカテゴリを含む場合。LAUNCHER_CATEGORY と ALTERNATIVE_CATEGORY の2つのカテゴリがある場合。
解析されたターゲットコンポーネントは、少なくともこれら2つのカテゴリを含んでいなければなりません。
startActivity()メソッドで送信されるすべての暗黙のIntentは、少なくとも1つのカテゴリを持ち、それは"android.intent.category.DEFAULT"です。
したがって、暗黙のIntentを受信したいActivityは、"android.intent.category.DEFAULT"カテゴリを含める必要があり、さもなければIntentが一致しない原因となります。
Intent-Filterの定義済みプロパティ設定例です。
関連
-
unsigned' の前に期待される一次式 Solution
-
PostionalBindingの役割のCmdletBindingAttribute
-
clang: error: linker command failed with exit code 1 (use -v to see invocati
-
デバッグのアサーションに失敗する問題 解決方法
-
メインクラス org.codehaus.plexus.classworlds.launcher.Launcher MAC が見つからない、またはロードできないエラーが以下に報告されています。
-
エラー]ldが1終了ステータスを返した場合の解決策
-
tomcat起動時のエラー java.lang.ClassNotFoundException を解決する。
-
AVD システムパスが見つかりません。Please define ANDROID_SDK_ROOT この問題は、必ずしもパス設定にあるわけではありません。
-
#1273 - Unknown collation:'utf8mb4_unicode_ci' エラーの解決法
-
lua が nil 値を呼び出そうとする。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ImportError の解決に成功しました。必要な依存関係 ['numpy'] がありません。
-
Python Basics: io.UnsupportedOperation: 読み取れません。
-
データベースエラーについて ERROR: 初期通信パケットの読み込み」でMySQLサーバに接続できなくなった
-
解決済みです。GET http://localhost:8080/statics/js/jquery-3.4.1.js net::ERR_ABORTED 404
-
Androidのパッケージ名変更とパッケージ名エラーに対応するクライアントが見つからない場合の解決策
-
numpy.random.multivariate_normalの使用法
-
unity build はエラーを報告します。 名前 'XXX' は現在のコンテキストに存在しません。
-
エラーが発生しました。ルールは1つのリソースソースしか持つことができません(提供されたリソースとテスト+インクルード+エクスクルード)。
-
ValueErrorの解決策です。閉じたファイルへの I/O 操作
-
次のクラスが見つかりませんでした: - android.support.v7.internal.widget.