Android學習記錄(7)—Intent中顯示意圖和隱式意圖的用法
Intent負責對應用中一次操作的動作、動作涉及資料、附加資料進行描述,Android則根據此Intent的描述,負責找到對應的元件,將 Intent傳遞給呼叫的元件,並完成元件的呼叫。
因此,Intent在這裡起著一個媒體中介的作用,專門提供元件互相呼叫的相關資訊,實現呼叫者與被呼叫者之間的解耦。
例如,在一個聯絡人維護的應用中,當我們在一個聯絡人列表螢幕(假設對應的Activity為listActivity)上,點選某個聯絡人後,希望能夠跳出此聯絡人的詳細資訊螢幕(假設對應的Activity為detailActivity)
為了實現這個目的,listActivity需要構造一個 Intent,這個Intent用於告訴系統,我們要做“檢視”動作,此動作對應的檢視物件是“某聯絡人”,然後呼叫startActivity (Intent intent),將構造的Intent傳入,系統會根據此Intent中的描述,到ManiFest中找到滿足此Intent要求的Activity,系統會呼叫找到的 Activity,即為detailActivity,最終傳入Intent,detailActivity則會根據此Intent中的描述,執行相應的操作。
對於intent主要的分類主要包括隱式意圖和顯式意圖。顯式意圖通常主要是啟動本應用中的Activity之間的資料,而隱式意圖則常見於啟動系統中的某些特定的動作,比如打電話,或者是跨應用的Activity啟動。
通常來說:
顯式意圖:呼叫Intent.setComponent()或Intent.setClass()方法明確指定了元件名的Intent為顯式意圖,顯式意圖明確指定了Intent應該傳遞給哪個元件。
隱式意圖:沒有明確指定元件名的Intent為隱式意圖。 Android系統會根據隱式意圖中設定的動作(action)、類別(category)、資料(URI和資料型別)找到最合適的元件來處理這個意圖。
顯示意圖非常常用也非常簡單一般用於應用程式內之間Activity的相互呼叫轉換,就不多說了,這裡我介紹一下隱式意圖:
簡單概括就是: 意圖包括:Action(動作),Category(附加資訊),Data(資料,具體內容),Tpye(型別)等等,舉個例子,說白了意圖就是啟動一個元件的的完整的動作資訊,就像打人,打就是Action動作,人就是Data內容,而Type就是型別,打什麼人呢?打壞人,type就是壞指的型別,只有這些資訊全了才能執行一個完整的意圖,當然還有一些資訊,比如scheme就是URI型別的資料的字首,就像這個例子當中的sms:,還有host主機名,path路徑等。
這裡我給大家舉一個呼叫系統簡訊的例子,使用隱式意圖啟動系統簡訊,並給10086傳送資訊的例子。程式碼如下:
上邊的這個例子是呼叫系統的東西,下邊我們來看看自定義的隱式意圖是怎麼呼叫的。/** * 隱式意圖的方法啟動系統簡訊 * * 簡單概括就是: 意圖包括:Action(動作),Category(附加資訊),Data(資料,具體內容),Tpye(型別)等等,舉個例子, * 說白了意圖就是啟動一個元件的的完整的動作資訊 * ,就像打人,打就是Action動作,人就是Data內容,而Type就是型別,打什麼人呢?打壞人,type就是壞指的型別 * ,只有這些資訊全了才能執行一個完整的意圖 * ,當然還有一些資訊,比如scheme就是URI型別的資料的字首,就像這個例子當中的sms:,還有host主機名,path路徑等 * * @param view */ public void startOne(View view) { Intent intent = new Intent(); intent.setAction("android.intent.action.SENDTO");// 傳送資訊的動作 intent.addCategory("android.intent.category.DEFAULT");// 附加資訊 intent.setData(Uri.parse("sms:10086"));// 具體的資料,傳送給10086 startActivity(intent); }
首先是先在清單檔案中進行註冊,程式碼如下:
第二個Activity裡的東西就是我們自定義設定的,就是下邊的這段程式碼:<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="net.loonggg.intent" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="net.loonggg.intent.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="net.loonggg.intent.SecondActivity" > <intent-filter> <!-- 自定義的動作 --> <action android:name="net.loonggg.xxx" /> <!-- 自定義的scheme和host --> <data android:host="www.baidu.com" android:path="/person" android:scheme="loonggg" /> <!-- 自定義的型別 --> <data android:mimeType="person/people" /> <!-- 附加資訊 --> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> </application> </manifest>
<activity android:name="net.loonggg.intent.SecondActivity" >
<intent-filter>
<!-- 自定義的動作 -->
<action android:name="net.loonggg.xxx" />
<!-- 自定義的scheme和host -->
<data
android:host="www.baidu.com"
android:path="/person"
android:scheme="loonggg" />
<!-- 自定義的型別 -->
<data android:mimeType="person/people" />
<!-- 附加資訊 -->
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
那在程式碼中怎麼呼叫自定義的呢?其實跟呼叫系統簡訊一樣,只不過呼叫系統簡訊裡的那些動作和資料,系統已經給我們配置好了,我們直接用就行,而自定義的就是我們自己寫的,呼叫方法和系統其實是一樣的。方法如下:
/**
* 通過自定義的隱式意圖啟動
*
* @param view
*/
public void startTwo(View view) {
Intent intent = new Intent();
intent.setAction("net.loonggg.xxx");
intent.addCategory("android.intent.category.DEFAULT");
intent.setDataAndType(Uri.parse("loonggg://www.baidu.com/person"),
"person/people");
startActivity(intent);
}
特別注意的一點是:intent.setData(data)和intent.setType(type)注意這兩個方法會互相清除,意思就是:如果先設定setData(data)後設置setType(type),那麼後設置的setType(type)會把前面setData(data)設定的內容清除掉,而且會報錯,反之一樣,所以如果既要設定型別與資料,那麼使用setDataAndType(data,type)這個方法。轉載註明出處:http://blog.csdn.net/loongggdroid/article/details/17887975
相關推薦
Android學習記錄(7)—Intent中顯示意圖和隱式意圖的用法
Intent(意圖)主要是解決Android應用的各項元件之間的通訊。 Intent負責對應用中一次操作的動作、動作涉及資料、附加資料進行描述,Android則根據此Intent的描述,負責找到對應的元件,將 Intent傳遞給呼叫的元件,並完成元件的呼叫。 因此,Intent在這裡起著一個媒體中介的作用,專
Android學習記錄(1)—Android中XML檔案的序列化生成與解析
xml檔案是非常常用的,在android中json和xml是非常常用的兩種封裝資料的形式,從伺服器中獲取資料也經常是這兩種形式的,所以學會生成和解析xml和json是非常有用的,json相對來說是比較簡單的,咱不做介紹了,這裡給大家講一下xml的序列化生成和解析。不廢話了,
【機器人學】機器人開源專案KDL原始碼學習:(7)examples中的CMakeList.txt檔案解讀
通過學習KDL開源專案的程式碼可以學習CMake構建程式的知識,現簡單介紹一下orocos_kinematics_dynamics-master\orocos_kinematics_dynamics-master\orocos_kdl\examples\CMakeList.txt檔案的指令。
C語言學習記錄(7)時間格式轉換
C語言學習記錄 學習OJ上的C語言題 時間格式轉換 題目描述 編寫一個程式,要求使用者輸入24小時制的時間,然後按照12小時制的格式顯示出來。 提示: hours == 0時,顯示12:MM AM hours < 12時,顯示HH:MM AM hours
Thymeleaf學習記錄(7)--頁面引入/片段引入
1.為頁面新增footer: Templates資料夾下新建HTML檔案: 1 <!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd"> 2 3 <html xml
kubernetes學習記錄(7)——彈性伸縮與滾動升級
彈性伸縮 彈性伸縮是指適應負載變化,以彈性可伸縮的方式提供資源。 Pod的彈性伸縮就是修改Replication Controller的Pod副本數。可以通過Kubectl scale命令實現。 建立Replication Controller te
Pro Android學習筆記(三)——Intent
Intent 簡介 Android中使用Intent來呼叫元件,Android中的元件包括Activity,Service,Broadcast Receiver,Content Provider。Android將多種理念融入到了Intent的概念中。可以使用Intent從一個應用程式中呼
python 學習記錄(7)-迴圈/結構化程式(氣泡排序)
1.1 while 迴圈 #!/usr/bin/python # -*- coding: UTF-8 -*- i = 1 while i <10: i = i + 1 print i # while迴圈 numbers = raw_input
JAVA學習記錄(一)————JAVA中的集合類
數組 節點 唯一性 list 接口規範 hashcode 工具類 collect 上進 這個圖是總體的框架圖,主要是兩個接口Collection和Map都繼承接口Iterator(Iterable),為了實現可以使用叠代器。Collection和Map類似平級關系。
CentOS初步學習記錄(三)Wget文件下載和Sed文件處理
下載速度 file 文件 socket cut inux 調試 數據行 use mozilla 一、wget 命令 wget命令用來從指定的URL下載文件,wget非常穩定,它在帶寬很窄的情況下和不穩定網絡中有很強的適應性,如果是由於網絡的原因下載失敗,wget會不斷
JAVA基礎(7)---java中的變數和常量
資料在執行過程中,有的不會改變,有的會發生改變。變得就稱為變數 不變的就稱常量。 變數 變數:變數是Java程式中最基本的儲存單元 變數的屬性:變數名,資料型別,儲存單元和變數值 1、變數名:合法的識別符號 2、資料型別:可以是基本資料型別和引用資料型
SpringMVC學習系列(7) 之 格式化顯示
在系列(6)中我們介紹瞭如何驗證提交的資料的正確性,當資料驗證通過後就會被我們儲存起來。儲存的資料會用於以後的展示,這才是儲存的價值。那麼在展示的時候如何按照要求顯示?(比如:小數保留一定的位數,日期按指定的格式等)。這就是本篇要說的內容—>格式化顯示。 從Spring3.X開始,Spring提供了C
Android學習筆記整理(8)--Activity的顯式意圖和隱式意圖
Android中Intent尋找目標元件的方式分為兩種,一種是顯式意圖,另一種是隱式意圖1.顯式意圖在通過Intent啟動Activity時,需要明確指定啟用元件的名稱。在程式中,如果需要在本應用中啟動
Python學習筆記(14)-Python中的程序和執行緒
1.多程序 1.1建立程序 Unix/Linux/Mac作業系統都可以使用fork()函式來建立子程序,分別在父程序和子程序內返回,例如 程式碼: import os # 匯入os模組 print ('當前程序的ID是:%s' % os.g
Android核心技術-day06-01-顯式意圖和隱式意圖
package com.gaozewen.intent; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.support.v7.app.AppC
Intent--顯示意圖和隱式意圖
一:顯示意圖 顯式意圖:呼叫Intent.setComponent()或Intent.setClass()方法明確指定了元件名的Intent為顯式意圖,顯式意圖明確指定了Intent應該傳遞給哪個元件
Android學習筆記(建立Menu,Intent的使用)
//Test1.java package com.activitytest.testactivity2; import android.app.Activity; import android.app.IntentService; import android.conten
Mongodb 學習筆記 (7)通過純mongo語句,將資料庫中的秒級時間戳,轉換成Date型別,並且裝換成任意時間格式
背景:在公司專案中,我們使用了秒級時間戳,作為時間資訊。但是mongodb自支援的多種時間處理函式,只針對date型別的欄位,於是我嘗試使用了mongo語句,將整型數的時間戳,通過mongo語句,轉換成date型別。 這裡使用的是aggregate(聚合),如下: db.t_merchant
機器學習筆記(7)——C4.5決策樹中的缺失值處理
缺失值處理是C4.5決策樹演算法中的又一個重要部分,前面已經討論過連續值和剪枝的處理方法: 現實任務中,通常會遇到大量不完整的樣本,如果直接放棄不完整樣本,對資料是極大的浪費,例如下面這個有缺失值的西瓜樣本集,只有4個完整樣本。 在構造決策樹時,處理含有缺失值
Android Camera 流程學習記錄(零)—— 碎碎念以及 Android 框架初識
碎碎念 到公司入職了快兩個月了。前一個月全是在公共培訓,其中有半個月還到某個子公司(手機生產工廠)去實習,體驗了生產最前線人民的日常生活…… 8 月開始才正式分配到軟體中心的工位上,然後又開始了新一輪的內部培訓,培訓的內容大概就是一些 Git 的使用