[セットトップ]Intent filter Action、Categoryプロパティの詳細---インスタンスソースコードが付属


Intentリクエストが1つのデータ上でアクションを実行する場合、Androidはどのアプリケーション(およびコンポーネント)がこのリクエストに応答できるかをどのように知っていますか?Intent Filterは、Activity、Service、Broadcast Receiverを登録するために使用され、あるデータ上で1つの動作を実行できる能力を持っています.
Intent Filterを使用すると、アプリケーションコンポーネントはAndroidに、同じプログラムのコンポーネント、ローカルまたはサードパーティのアプリケーションを含む他のプログラムのコンポーネントの動作要求にサービスを提供することができると伝えます.
アプリケーションコンポーネントをIntentプロセッサとして登録するには、コンポーネントのmanifestノードにintent-filterラベルを追加します.Intent Filterノードでは、次のラベル(関連プロパティ)を使用して、コンポーネントがサポートするアクション、種類、データを指定できます.
1、動作テスト:
        <activity android:name="com.x210.intentfilters.OneActivity" android:label="oneActivity">   
            <intent-filter>
                <action android:name="myapp.action.test1" />
                <category android:name="android.intent.category.DEFAULT" />  
            </intent-filter>
        </activity>

ルールa.1つの要素には少なくとも1つのが含まれている必要があります.そうしないと、任意のIntent要求はと一致しません.
        <activity android:name="com.x210.intentfilters.OtherActivity" android:label="otherActivity">   
            <intent-filter>  
                <category android:name="cate1"/>
                <category android:name="cate2"/>
                <category android:name="android.intent.category.DEFAULT" />  
            </intent-filter>
        </activity> 

以上の要素にはラベルが含まれておらず、任意のIntentリクエストがと一致しません.
ルールb.Intentリクエストのアクションがのいずれかのと一致する場合、そのIntentはこのの動作テストに合格する.
        <activity android:name="com.x210.intentfilters.OneActivity" android:label="oneActivity">   
            <intent-filter>
                 <action android:name="myapp.action.test1" />
                 <action android:name="myapp.action.test2" />
                 <action android:name="myapp.action.test3" />
                <category android:name="android.intent.category.DEFAULT" />  
            </intent-filter>
        </activity> 
以下のいくつかのIntentリクエストは、上記の動作テストに合格することができる.
要求1:
Intent intent = new Intent("myapp.action.test1");
startActivity(intent);
リクエスト2:
Intent intent = new Intent("myapp.action.test2");
startActivity(intent);

Intentリクエストまたはに特定のActionタイプが説明されていない場合、次の2つの状況が発生します.
(1)にアクションタイプが含まれていない場合、どのIntentリクエストもこのと一致しません.(2)逆に、IntentリクエストにActionタイプが設定されていない場合、にActionタイプが含まれている限り、このIntentリクエストはの動作テストにスムーズに合格する.
2、カテゴリテスト
  <activity android:name="com.x210.intentfilters.OtherActivity" android:label="otherActivity">   
            <intent-filter>  
                <action android:name="myapp.action.test1" />
                <category android:name="cate1"/>
                <category android:name="cate2"/>
                <category android:name="android.intent.category.DEFAULT" />  
            </intent-filter>
        </activity>

IntentリクエストのすべてのCategoryがコンポーネントのいずれかのIntentFilterのと完全に一致している場合にのみ、そのIntentリクエストがテストに合格し、IntentFilterの余分な宣言はマッチングに失敗しません.カテゴリテストが指定されていないIntentFilterは、カテゴリが設定されていないIntentリクエストにのみ一致します.
以下の3つのIntentリクエストは、上記のカテゴリでテストできます.
要求1:
	Intent intent = new Intent("myapp.action.test1");
	intent.addCategory("cate1");
	startActivity(intent);
リクエスト2:
	Intent intent = new Intent("myapp.action.test1");
	intent.addCategory("cate2");
	startActivity(intent);

リクエスト3:
        Intent intent = new Intent("myapp.action.test1");
        intent.addCategory("cate1");
        intent.addCategory("cate2");
        startActivity(intent); 

インスタンス部分のソース:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.x210.intentfilters"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="9"
        android:targetSdkVersion="9" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.x210.intentfilters.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.x210.intentfilters.OneActivity" android:label="oneActivity">   
            <intent-filter>
                <action android:name="myapp.action.test1" />
                <action android:name="myapp.action.test2" />
                <category android:name="android.intent.category.DEFAULT" />  
            </intent-filter>
        </activity>
        <activity android:name="com.x210.intentfilters.OtherActivity" android:label="otherActivity">   
            <intent-filter>  
                <action android:name="myapp.action.test1" />
                <category android:name="cate1"/>
                <category android:name="cate2"/>
                <category android:name="android.intent.category.DEFAULT" />  
            </intent-filter>
        </activity>
    </application>

</manifest>

MainActivity.JAva(コアコード)
protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);	
		actionbutton = (Button) findViewById(R.id.ActionButton);
		categorybutton = (Button) findViewById(R.id.CategoryButton);
		actionbutton.setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent("myapp.action.test1");
				startActivity(intent);
			}
		});
		categorybutton.setOnClickListener(new View.OnClickListener() {		
			@Override
			public void onClick(View v) {
				Intent intent = new Intent("myapp.action.test1");
				intent.addCategory("cate1");
				intent.addCategory("cate2");
				startActivity(intent);
			}
		});
	}

特別注意インスタンスのソースコード(無料):http://download.csdn.net/detail/a13429921973/5720603