androidのandroidintent.category.DEFAULTの用途と使用

2271 ワード

1、この問題を明らかにするには、まずimplicit(非表示)intentとexplicit(明確)intentとは何かを明らかにする必要があります.
Explicit Intentは、以下のJavaコードなど、起動するActivityを明確に指定しています.
Intent intent= new Intent(this, B.class);

Implicit Intentは、どのActivityを起動するかを明確に指定していませんが、いくつかのIntent Filterを設定することで、システムに適切なActivityをフィルタして起動させます.
2、intentがどのactivityに送るかは、action、category、dataの3つのマッチングが必要です.
理論的には、intentがcategoryを指定しない場合、intent filterの内容が何であれ一致するはずです.ただし、implicit intentの場合、androidはCATEGORY_をデフォルトで追加します.DEFAULT、そうするとintent filterにandroidがない場合.intent.category.DEFAULTというcategoryではマッチングテストに失敗します.したがって、activityがimplicit intentの受信をサポートしている場合は、intent filterにandroidを追加する必要があります.intent.category.DEFAULT.
例外は次のとおりです.
<intent-filter>
		<action android:name="android.intent.action.MAIN" />
		<category android:name="android.intent.category.LAUNCHER" />
	</intent-filter>

中にandroidを入れる必要はありません.intent.category.DEFAULT、もちろん加入しても問題ありません.これはアプリケーション起動デフォルトの最初の起動のactivityです(各アプリケーションにはそんなに多くのactivityがありますが、いずれかが最初に起動しなければなりませんね)
自分で定義したActivityが暗黙的に起動する場合は、AndroidManifast.xmならandroidを付けなければなりません.intent.category.DEFAULT、そうでなければ役に立たない
それ以外にもcategoryの用途はたくさんあります
例えばデスクトップを作ったり、ホームキーを押したりしたときに自分で作ったアプリケーションを起動したりします.
<activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER"/>
                <category android:name="android.intent.category.HOME" />
            </intent-filter>
        </activity>

intentではどのようにその3つのマッチングデータを構成するのか、簡単に言えば
つまり、ジャンプするActivityを直接指定しない場合、Intentに関連するパラメータを提供し、AndroidManifestに自動的に行かせる.xmlに既存のActivityがマッチしない
IntentFilterのxmlにおける3つの主要なパラメータ:action,categary,data.
この3つのパラメータは、Intentのコンストラクション関数またはIntentが提供する方法で指定できます.
intent.setAction(action);
intent.setData(data);
intent.addCategory(category);