intent基本了解
我們都知道Android四大元件:Activity 、Service、broadcast receiver 及 内容提供者。
其中,Activity 、Service、broadcast receiver 三大元件之間的通信 intent 起着至關重要的作用,即 媒介。
intent 可以激活 Android 應用的三個核心元件:活動(Activity)、服務(Service)和廣播接收器(BroadcastReceiver)
顯式意圖 和 隐式意圖
顯示意圖:在建立 intent 的時候明确指定了元件名,例如:調用 Intent.setComponent() 或Intent.setClass() 或 使用構造器來指定元件( new Intent(MainActivity.this, OtherActivity.class))
隐式意圖:在建立 intent 的時候沒有明确指定元件名,而是 系統根據 設定的 動作(action)、類别(category)、資料(data: URI和資料類型)找到最合适的元件來處理這個意圖。
隐式意圖代碼示例
第一步:建立 SecondActivity
第二步:在 清單檔案 中聲明
如果你在清單檔案中 沒有加 <category android:name="android.intent.category.DEFAULT"/> ,就會報如下錯誤,這是因為 你在調用 startActivity()的時候系統自動給你的意圖添加了 android:name="android.intent.category.DEFAULT" 這個類别,是以你在清單檔案中不聲明,系統當然自動比對不上,除非你不用隐式意圖。

第三步:跳轉代碼
第四步:傳遞 Uri 資料
我們可以通過Intent的Data、Type、Extra傳入一些資料,這些資料可以用于進一步篩選比對Activity,打開指定的頁面、檔案,或者給準備啟動的Activity傳入需要的參數。
這個時候我們再建立一個 ThirdActivity.java
同時在 清單檔案 中進行聲明
我們可以發現 我們注冊 SecondActivity 和 ThirdActivity 的時候 給的篩選條件 action 、category 是一樣的。是以但我們仍然執行第三步的跳轉代碼時,系統就會讓我們進行選擇了,運作效果如下圖:
這個時候,我們的 data 篩選條件就起作用了,我們不妨在 ThirdActivity 聲明的時候加上如下篩選條件:
這個時候,我們再 執行第三步的跳轉代碼 毫無疑問,當然是跳轉到 SecondActivity。效果如下:
但是,這個效果并不是我要說的重點,我們重點是看如何通過 data 來傳遞 uri 資料。 是以,我們對 第三步 的跳轉代碼進行如下改造:
相應的 ThirdActivity 也得作出相應的接收
運作效果如下:
所有對于 data 這個篩選項 我們搞清楚以下三個地方:
清單檔案中
跳轉代碼
擷取資料代碼
顯式意圖
如果大家把上面的 隐式意圖 搞清楚,顯式意圖簡直就是小草一碟。
根據 顯式意圖 的定義,我們在建立 intent 的時候,明确那個要跳轉的元件即可。
第一步:代碼示例
第二步:傳遞 action 、category、data,請參考隐式意圖
資料擷取代碼 在目标元件中編寫,這裡的目标元件為 SecondActivity
效果展示