Android基礎 intent詳解

2021-06-18 05:49:47 字數 2877 閱讀 5792

intent (意圖) 用於activity之間的資料傳遞以及activity之間的切換(這兩者都可以在乙個應用多個activity之間實現,同樣也適用於不同應用間的activity。同乙個應用的實現和不同應用間的實現區別在於後者需要通過action和category實現,而前者可以通過action和為intent新增引數實現)。

乙個intent物件包含一組資訊:

component name 指的是所要啟動的activity名字,通常為***.class 也有可能寫成***.this

action 動作,指的是要求要啟動的activity去做某事,也可以通過action來找到activity。

data 動作需要的資料

category 被執行動作的附加資訊

extras intent所傳遞的資料

intent用法(同乙個應用中):

無引數的activity跳轉

intent intent = new intent(activity1.this, activity2.class);

startactivity(intent);

帶引數的activity跳轉

intent intent = new intent(activity1.this, activity2.class);

bundle bundle=new bundle();

bundle.putstring("name", "this is from activity1!");

intent.putextras(bundle);

startactivity(intent);

獲得資料

bundle bundle=getintent().getextras();

string name=bundle.getstring("name");

帶返回結果的activity跳轉activity1

intent intent = new intent(activity1.this, activity2.class);

bundle bundle=new bundle();

bundle.putstring("name", "this is from activity1!");

intent.putextras(bundle); // 上面兩行**相當於intent.putextra(「test」, "aa」);

startactivityforresult(intent,1); //這裡activity跳轉是使用startactivityforresult,,還有乙個引數被稱為請求碼,為常量,這裡為了方便設為1

activity2

intent intent=getintent();

bundle bundle=new bundle();

bundle.putstring("name", "this is from activity2!");

intent.putextras(bundle);

setresult(2, intent);//這裡需要設定一下返回內容,第乙個引數被稱為返回碼,也是乙個常量,同樣方便起見設為2

重寫activity1中方法onactivityresult

@override

protected void onactivityresult(int requestcode, int resultcode, intent data)

}}

intent用法(不用應用中,這裡的不同應用多用於呼叫系統應用):

uri uri = uri.parse("tel:0800000123");  

intent intent = new intent(intent.action_dial, uri);

startactivity(intent);

這裡會用到通過動作去呼叫其他應用中的activity,在androidmanifest.xml中有乙個叫intent-filter的標籤,是用來篩選intent,而篩選intent則是靠動作(action)以及category實現的。

在activity中可以用語句

intent.setaction( "intent.action_dial");

intent.addcategory(intent.category_default);

來設定action和category。這裡需要注意的一點是每乙個通過 startactivity() 方法發出的隱式 intent 都至少有乙個 category,就是 "android.intent.category.default",所以在androidmanifest.xml檔案中必須要有"android.intent.category.default",而在activity中,intent.addcategory(intent.category_default);可以不寫,寫了也沒什麼用。乙個 intent 可以有多個 category,但至少會有乙個,也是預設的乙個 category。只有 intent 的所有 category 都匹配上,activity 才會接收這個intent。

顯式意圖:呼叫intent.setcomponent()或intent.setclass()方法明確指定了元件名得intent為顯式意圖,顯式意圖明確指定了intent應該傳遞給那個元件。   

隱式意圖:沒有明確指定元件名得intent為隱式意圖。android系統會根據隱式意圖中設定的動作(action)、類別(category)、資料(uri和資料型別)找到最合適的元件來

處理這個意圖。

Android 應用核心 Intent

首先要有componentname,需要指定包名和類名 或者使用setclass 指定包名和類名 action是乙個字串,乙個intent物件只包含乙個action屬性,目標元件包括activity和broadcastreceiver兩類 action main action view 等,每個動作...

Android開發 Intent使用

1.啟動activity將intent物件傳遞給startactivity 方法或startactivityforresult 方法以啟動乙個activity,該intent物件包含了要啟動的activity的資訊及其他必要的資料。intent有兩種型別 explicit 顯式 的和implict ...

Android的元件通訊 intent

元件要通過intent宣告自己的條件,一般通過元件的元素來實現.intent可以啟動乙個activity,可以啟動乙個service,也可以發起乙個廣播 broadcast intent由以下幾個部分組成 動作 action 資料 data 分類 category 型別 type 元件 compon...