Android:Intent與IntentFilter 解析

說明 java

    一直不明白IntentFilter的做用,因而上網找資料。發現你們的說明都很難明白,沒有舉例說明。 android

    對於IntentFilter的說明,我引用 h3c4lenovo 的:Android Intent action有什麼用??? 一文進行說明... app

如下是引文的大意(有修改): ide

一、場景     this

   在講action以前,我跟你們回憶一個場景。 spa

   好比說我在某個App中點擊拍照,會跳轉到照相機的界面。可是當我新裝了camer360或之類的第三方照相app再點擊照相就會先彈出一個Dialog來讓我選擇是使用默認camer仍是camer360 .net

二、顯式Intent 和 隱式Intent(根據場景來理解
code

    <1>顯式Intent:明確指出了目標組件名稱的Intent xml

        顯式Intent直接用組件的名稱定義目標組件,這種方式很直接。可是因爲開發人員每每並不清楚別的應程序的組件名稱。所以,顯式Intent更多用於在應用程序內部傳遞消息。 blog

        如:

Intent intent = new Intent(MainActivity.this,BActivity.class);

     <2>隱式Intent:沒有明確指出目標組件名稱的Intent

      隱式Intent它不會用組件名稱定義須要激活的目標組件,它更普遍地用於在不一樣應用程序之間傳遞消息。若是要跳轉到一個未知路徑,可是已知功能的Activity就要用到隱式intent。

      如:

Intent intent = new Intent(Intent.ACTION_SEND);

    實例一:

    有三個Activity:MainActivity.java/BAcitvity.java/CActivity.java
    假設這是一個照相應用MainActivity是程序入口,BActivity和CActivity均可以處理照相的內容
    在咱們不會使用action的時候咱們要使這個應用既可使用BActivity照相,又能使用CActivity照相如何實現?
    固然是在MainActivity中寫兩個Button,
  

new Intent(MainActivity.this,BActivity.class);
new Intent(MainActivity.this,CActivity.class);

     經過兩種不一樣的Intent來發起請求。那麼如何使用action來實現呢?

     在AndroidManifest.xml中先這樣定義:

<activity
    android:name=".MainActivity"
    android:label="@string/title_activity_main" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
        
<activity
    android:name=".BActivity"
    android:label="@string/title_activity_main"
    android:launchMode="singleTask" >
    <intent-filter>
        <action android:name="com.h3c.intent.ACTION_VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
     </intent-filter>
</activity>
        
<activity
    android:name=".CActivity"
    android:label="@string/title_activity_main" >
    <intent-filter>
        <action android:name="com.h3c.intent.ACTION_VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

    實例說明:

     在MainActivity中實現一個Button,點擊發送:new Intent("com.h3c.intent.ACTION_VIEW");
     此時就會彈出一個Dialog讓咱們自動選擇是使用BActivity仍是使用CActiviy了
     這也就是隱式intent,即發送一種類型的action.
     可讓全部支持該類型的activity都收到消息,而後由用戶選擇使用哪一個activity處理。

總結:

        引文的例子其實也就說出了IntentFilter的用法,其實IntentFilter就有點像Struts2裏的攔截器。固然,IntentFilter的

        使用不止能夠在XML裏定義,還能夠用Java代碼來實現(我用了廣播的寫法,還能夠有自定義的寫法,主要是IntentFilter的跳轉不一樣而已。):

Intent.android.content.ContextWrapper.registerReceiver(BroadcastReceiver receiver, 
IntentFilter filter)   
// 廣播接收者 - 廣播的接收
private BroadcastReceiver myBroadcastReceiver = new BroadcastReceiver() {
 
       @Override
       public void onReceive(Context context, Intent intent) {
           // 相關處理,如收短信,監聽電量變化信息
       }
 
    };
 
//代碼中註冊:
IntentFilter intentFilter = new IntentFilter( "android.provider.Telephony.SMS_RECEIVED " );
registerReceiver( mBatteryInfoReceiver , intentFilter);



最後推薦一個講解更爲詳細的文章:android基礎知識06:intent和intentfilter

相關文章
相關標籤/搜索