Intent是android中各activity之間通信的一個很重要的類,一般我們是這麼使用的
//建立一個intent
Intent intent = new Intent();
//壓值進intent中
//intent是基于一種基于Map的資料結構
//傳我們的基本資料類型的可以之間key,value方式傳值
intent.putExtra("hello","Hello world");
//但是,傳一個對象的時要注意,該對象要實作序列化視窗才可以傳值
//putExtra(String name, Serializable value)
Demo demo = new Demo();
intent.putExtra("Demo",demo);
//然後,我們把這個intent傳到另外一個activity
intent.setClass(xxx.this,zzz.class);
startActivity(intent);
//-------
//目标activity
//擷取傳過來的intent Intent intent = getIntent();
//從Intent中擷取值
String hello = intent.getStringExtra("Demo");
Demo demo = (Demo)intent.getSerializable("Demo");
<code>以上代碼就是最基礎的Intent的用法</code>
首先我們看下Intent的構造方法
Intent()
//Create an empty intent.
Intent(Intent o)
//Copy constructor.
Intent(String action)
//Create an intent with a given action.
Intent(String action, Uri uri)
//Create an intent with a given action and for a given data url.
Intent(Context packageContext, Class<?> cls)
//Create an intent for a specific component.
Intent(String action, Uri uri, Context packageContext, Class<?> cls)
//Create an intent for a specific component with a specified action and data.
<code>出這些構造方法中我們,可以看出,建立一個Intent其實可以設定很多東西,這裡我說說componentName,action,category,data</code>
componentName 直譯的話就是元件的名字的意思,如果我們寫的一個類當作成一個元件,那麼這個componentName就是用來封裝我們寫的這些類的位置.
//建立一個component的對象
ComponentName componentName = new ComponentName(Context.this, xxx.class);
Intent intent = new Intent();
Intent.setComponent(componentName);
//----------
//在xxxactivity中
ComponentName comp = getIntent().getComponent();
String packageName = comp.getPackName();
String className = comp.getClassName();
<code>其實細心的同學可以發現,其實跟setClass(),沒什麼差別嗎,而且,還比setClass()麻煩,其實,setClass()是封裝了這個功能而已,最實作還是要用到這個類.</code>
我感覺,學intent 和 intent-filter把action,category,data搞清楚才算真正的掌握了intent的用法.
如果學過Structs2的同學應該不會陌生,所謂的action就是發送一個特定的請求,然後,由一個符合這個請求的activity響應
官方文檔中是這麼說action的:
我簡要說下我了解的大義,有錯歡迎指出
action 在很大一部分程度上決定你的intent 是如何建構的,特别是還有data,和 額外的一些字段,還有更多的是如何決定方法名,設定數組和傳回的參數.由于這個原因,這是一個很好的方法去盡可能的具體的使用action,用action把這些字段緊密的聯系在一起.另外,靈活定義你的action,然後把它定義在一個文檔中為你的intent對象的組建能夠正常處理
渣翻譯…可能比谷歌翻譯還有爛…有錯歡迎指出!!!!!!!!!!!!!
要使一個action能夠正常運作,category是必不可少的,關于category詳細介紹請看開發者文檔中的intent and intent-filter
這裡說下注意的細節和使用.
首先,這句話是很重要的..取之于官方文檔
Therefore, activities that are willing to receive implicit intents must include "<code>android.intent.category.DEFAULT</code>" in their intent filters.
這句話,告訴我們在intent-filter(可以用xml建立也可以用代碼建立,這裡主要講xml的建立),必須添加一個<code>android.intent.category.DEFAULT</code>,至于,不添加會發生什麼事…我花了半個小時的排錯告訴我是無法運作的
//在我們要運作的activity中添加
<activity android:name=".SecondActivity" android:label="second"> <intent-filter >
<action android:name="kg.tom.TEST"/>
<category android:name="
android.intent.category.DEFAULT " />
</intent-filter>
</activity>
//firstActivity
//在建立好的一個監聽器裡面方法中寫上
Intent intent = new Intent();
intent.setAction("kg.tom.TEST");
//利用action來運作相應的activity startActivity(intent);
注意:每個intent隻能設定一個action,但是,可以設定多個category,這裡的組合問題,自己好好想想吧.
因為就是一些參數的介紹,看官方文檔就好了,我是這樣了解這個DATA,例如,我們一個Mp3播放器,當我們在任務管理器中點選一個MP3檔案,MP3這個檔案就是一個data,就會觸發我們,在intent-filter比對這個Mp3,<data />的activity運作..
本文轉自 liam2199 部落格,原文連結:http://blog.51cto.com/youxilua/772705 如需轉載請自行聯系原作者