編輯:關於android開發
Android的幾個主要組件可以相互協調工作,共同組成一個完整的Android應用。這些組件之間的通信就需要借助於Intent完成。
一、Intent的基本概念
Intent負責對應用中一次操作的動作、動作涉及數據、附加數據進行描述,Android則根據此Intent的描述,負責找到對應的組件,將 Intent傳遞給調用的組件,並完成組件的調用。
在一個Android應用中,Intent是對執行某個操作的一個抽象描述,Intent 負責提供組件之間相互調用的相關信息傳遞,實現調用者和被調用者之間的解耦。
二、Intent的屬性
Intent是對執行某個操作的一個抽象描述,其描述的內容包括,對執行動作Action的描述、對操作數據的描述、還有4種附加屬性的描述。分別介紹如下:
Action:對執行動作的描述,是個字符串,是對所將執行的動作的描述,在Intent類中定義了一些字符串常量作為標准動作,譬如:
public static final String ACTION_DIAL = "android.intent.action.DIAL"public static final String ACTION_SENDTO = "android.intent.action.SENDTO";
我們還可以自定義Action,並定義相應的Activity來處理我們自定義的行為。
data:是對執行動作所要操作的數據的描述,Android中采用URI來表示數據,譬如在聯系人應用中,指向聯系人1的URI可能為:content://contacts/1 (由content provider提供的數據類型是content) 。 結合Action和data可以基本表達出意圖。
•VIEW_ACTION content://contacts/1 — 顯示標識符為”1″的聯系人的詳細信息
•EDIT_ACTION content://contacts/1 — 編輯標識符為”1″的聯系人的詳細信息
•VIEW_ACTION content://contacts/ — 顯示所有聯系人的列表
•PICK_ACTION content://contacts/ — 顯示所有聯系人的列表,並且允許用戶在列表中選擇一個聯系人,然後把這個聯系人返回給父activity。例如:電子郵件客戶端可以使用這個 Intent,要求用戶在聯系人列表中選擇一個聯系人。
除了Action和data之外,還有4個屬性。
catagory 類別:是被請求組件的額外描述信息,Intent類中也定義了一組字符串常量表示Intent不同的類別。完整的列表可以看API文檔中Intent類的相應部分。
public static final String CATEGORY_LAUNCHER = "android.intent.category.LAUNCHER";public static final String CATEGORY_PREFERENCE = "android.intent.category.PREFERENCE";
extra 附加信息:除了data之外,還可以通過extra附加信息,extra屬性使用Bundle類型進行數據傳遞,我們可以把Bundle當做HashMap來理解,附加數據可以通過 intent.putExtras() 和 intent.getExtras() 進行傳入和讀取。 就像這樣,獲取附加信息: Bundle bundle = intent.getExtras();
添加附加信息: Bundle bundle = new Bundle(); intent.putExtras(bundle);
component 組件:顯式指定Intent的目標組件的名稱。如果指定了component屬性,系統會直接使用它指定的組件,而非匹配查找。
type 數據類型:顯式指定Intent的數據類型,一般Intent的數據類型都能夠根據數據本身進行判定,但是通過設置這個屬性,可以強制采用顯式指定的類型和不再進行推導。
三、解析Intent
Intent是一種在不同組件之間傳遞的請求信息,是應用程序發出的請求和意圖,作為一個完整的消息傳遞機制,Intent不僅需要發送端,還需要接收端。
當指定了component屬性後,就是顯式的指定了目標組件,也就是接收端。如果沒有明確指定目標組件,那麼Android系統會使用 Intent 裡的(action,data,category)三個屬性來尋找和匹配接收端。
四、IntentFilter
應用程序組件可以使用IntentFilter來向系統說明自己可以響應和處理那些Intent請求。組件一般通過AndroidManifest.xml文件的<Intent-Filter>描述。
XML/HTML代碼五、簡單的撥打電話的例子
這是一個簡單的撥打電話的程序,它可以截獲手機上的撥號按鍵發出的請求,自己輸入號碼,並把數據傳給系統的打電話程序,從而實現打電話功能。
先上效果圖:
按綠色的撥號按鈕的時候會呼出一個菜單讓你選擇使用哪個撥號程序。
我們選擇簡單撥號程序,出現輸入框可以填寫電話號碼,並撥號。
點擊撥號後,調用了系統的撥號程序。
最終實現了撥號:
再上代碼,MainTinyDial.java的代碼:
Java代碼Intent的內容就講到這裡了。Intent使得Android組件間的通信非常靈活方便,在Android開發中使用頻率比較高,掌握它很有必要。
Android源碼之陌陌源碼,android源碼本源碼是一個老版本的陌陌源碼,翻了翻代碼,發現有完整的登陸注冊功能(基於本地)其余都是靜態頁面。有需要的朋友可以拿去研究一
在Android Studio 配置OpenCV 3.1 進入官網(http://opencv.org/)下載OpenCV for android並解壓,不知道什麼原
Android系統之路(初識MTK) ------ System-Bluetooth name/WiFi AP name/sleep add never/Notifica
算法—二叉堆,算法二叉實現棧或是隊列與實現優先隊列的最大不同在於對性能的要求。對於棧和隊列,我們的實現能夠在常數時間內完成所有操作;而對於優先隊列,插入元素和刪除最大元素