android之android.intent.category.DEFAULT的用途和使用

一、要弄清楚這個問題,首先須要弄明白什麼是implicit(隱藏) intent什麼是explicit(明確) intent。html

     Explicit Intent明確的指定了要啓動的Acitivity ,好比如下Java代碼:java

[java] view plaincopyprint?android

  1. Intent intent= new Intent(this, B.class);  app

 Implicit Intent沒有明確的指定要啓動哪一個Activity ,而是經過設置一些Intent Filter來讓系統去篩選合適的Acitivity去啓動。函數

二、intent到底發給哪一個activity,須要進行三個匹配,一個是action,一個是category,一個是data。測試

理論上來講,若是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。this

例外狀況是:spa

[java] view plaincopyprint?.net

  1. <intent-filter>  orm

  2.         <action android:name="android.intent.action.MAIN" />  

  3.         <category android:name="android.intent.category.LAUNCHER" />  

  4.     </intent-filter>  


中沒有必要加入android.intent.category.DEFAULT,固然加入也沒有問題。這個是應用啓動默認的第一個啓動的activity(每一個應用有那麼多activity,總得有一個是第一個啓動的吧)

 

若是本身定義的某個Activity要經過隱式啓動,在AndroidManifast.xm那麼必須加上android.intent.category.DEFAULT,不然不起做用

除此以外,category的用途還有不少

好比作個桌面,按home鍵時啓動本身作的應用

[html] view plaincopyprint?

  1. <activity  

  2.             android:name=".MainActivity"  

  3.             android:label="@string/app_name" >  

  4.             <intent-filter>  

  5.                 <action android:name="android.intent.action.MAIN" />  

  6.                 <category android:name="android.intent.category.LAUNCHER"/>  

  7.                 <category android:name="android.intent.category.HOME" />  

  8.             </intent-filter>  

  9.         </activity>  

在intent中是如何配置那三個匹配數據的呢,也簡單一說

也就是說,在不直接指定要跳轉的Activity的時候,爲Intent提供一些相關的參數,讓其自動去和AndroidManifest.xml中已有的Activity去匹配

IntentFilter在xml中的三個主要的參數:action,categary,data。

咱們經過Intent的構造函數或者Intent提供的方法能夠指定這個三個參數:

           

[java] view plaincopyprint?

  1. intent.setAction(action);  

  2. intent.setData(data);  

  3. intent.addCategory(category);  

相關文章
相關標籤/搜索