在上一篇中,咱們瞭解到,Intent實現跳轉,須要設置一個target,就是找到對應Activity的一個標誌。而這個標誌能夠是一個class,或者是一個Action。前者能夠稱之爲顯示跳轉,然後者就是隱式的跳轉了。
Intent能夠啓動Activity,啓動Service,或者是發送一個廣播信息。下面就介紹一下Intent的相關知識。android
ComponentName(組件名稱)
這個參數是用來爲Intent顯性的指定目標組件。一旦設置了ComponentName,Android會直接將Intent傳遞給組件名所指定的組件去啓動它。若是沒有設置ComponentName,那麼該Intent就是隱式的,Android系統會根據其餘的Intent的信息肯定跳轉到哪一個組件。若是你啓動一個本身App中的組件,能夠經過顯式調用。須要注意的是,當啓動Service的時候,儘可能指定Component Name。不然,就不能肯定最終哪一個App的哪一個組件被啓動了,而且用戶也看不到哪一個Service啓動了。數組
ComponentName c = new ComponentName(FirstActivity.this,SecondActivity.class); Intent intent1 = new Intent(); intent1.setComponent(c); startActivity(intent);
標準的用法就是這樣的,常規狀況下咱們不會寫這麼複雜,簡寫爲 Intent intent1 = new Intent(FirstActivity.this,SecondActivity.class);
瀏覽器
action是表示了要執行操做的字符串,表明Intent要完成的一個抽象「動做」。發送的這個操做Intent並不負責找到具體的組件,而是由intent-filter進行篩選。其對應着Intent Filter中的action標籤<action />。工具
action須要在AndroidManifest.xml中註冊,下面給出一個樣例測試
<activity android:name=".activity.FirstActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
使用方法:網站
Intent intent = new Intent(); intent.setAction("view_learn"); startActivity(intent);
Category(類別)
Category是用來位Action提供額外的附加類別,二者一般會結合使用,一個Intent只能有一個Action可是能夠有多個Category。當一個Intent設定了Category後,系統會根據Category尋找一組對應的組件,擁有這個Category屬性的都會收到這個請求。
這個Category對應的組件,能夠在AndroidManifest文件設定。 <category android:name="android.intent.category.LAUNCHER" />
在組件中的調用方式以下:this
Intent i = new Intent(); i.addCategory(Intent.CATEGORY_APP_BROWSER); startActivity(i);
Data(數據),Type(MIME類型)
Data一般用於Action屬性提供操做的數據,接受一個URI對象;URI的格式一般爲:scheme://host:port/path,參數的意義依次爲:協議頭,主機。端口,路徑。
Type一般用於指定Data所制定的Uri對應的MIME類型,用於作一個限制,只容許經過MIME指定的數據。
這些屬性都是在AndroidManifest文件中定義的,能夠定義一個data標籤,樣式以下:code
<data android:scheme="test" android:host="test" android:port="5678" android:path="/test"/>
在另外一個組件中的調用以下:orm
Intent i = new Intent(); i.setData(Uri.parse("test://test:5678/test")); startActivity(i);
主要是用於標記Activity的啓動模式,常見的標記主要有如下幾種:xml
標記 | 意義 |
---|---|
FLAG_ACTIVITY_NEW_TASK | 會建立一個新的Activity,至關於Activity啓動模式的standard |
FLAG_ACTIVITY_BROUGHT_TO_FRONT | 若是棧中已有該Activity則直接將該Activity帶到前臺 |
FLAG_ACTIVITY_CLEAR_TOP | 清除當前Activity之上的全部實例,該Flag至關於Activity啓動模式中的singleTask |
FLAG_ACTIVITY_SINGLE_TOP | Activity棧中只會存在一個實例,若是不在棧頂會直接帶到棧頂 |
FLAG_ACTIVITY_NO_HISTORY | 使用該標誌時,啓動的Activity不會保存在棧中 |
在Android的framework中也定義了一些經常使用的常量,這裏整理一下。
常見的Activity Action Intent常量:
常量名稱 | 常量值 | 意義 |
---|---|---|
ACTION_MAIN | android.intent.action.MAIN | 應用程序入口 |
ACTION_VIEW | android.intent.action.VIEW | 顯示數據給用戶 |
ACTION_ATTACH_DATA | android.intent.action.ATTACH_DATA | 指明附加信息給其餘地方的一些數據 |
ACTION_EDIT | android.intent.action.EDIT | 顯示可編輯的數據 |
ACTION_PICK | android.intent.action.PICK | 選擇數據 |
ACTION_CHOOSER | android.intent.action.CHOOSER | 顯示一個Activity選擇器 |
ACTION_GET_CONTENT | android.intent.action.GET_CONTENT | 得到內容 |
ACTION_DIAL | android.intent.action.GET_CONTENT | 顯示打電話面板 |
ACITON_CALL | android.intent.action.DIAL | 直接打電話 |
ACTION_SEND | android.intent.action.SEND | 直接發短信 |
ACTION_SENDTO | android.intent.action.SENDTO | 選擇發短信 |
ACTION_ANSWER | android.intent.action.ANSWER | 應答電話 |
ACTION_INSERT | android.intent.action.INSERT | 插入數據 |
ACTION_DELETE | android.intent.action.DELETE | 刪除數據 |
ACTION_RUN | android.intent.action.RUN | 運行數據 |
ACTION_SYNC | android.intent.action.SYNC | 同步數據 |
ACTION_PICK_ACTIVITY | android.intent.action.PICK_ACTIVITY | 選擇Activity |
ACTION_SEARCH | android.intent.action.SEARCH | 搜索 |
ACTION_WEB_SEARCH | android.intent.action.WEB_SEARCH | Web搜索 |
ACTION_FACTORY_TEST | android.intent.action.FACTORY_TEST | 工廠測試入口點 |
常見的BroadcastIntent Action常量 BroadcastIntent
Action字符串常量 | 描述 |
---|---|
ACTION_TIME_TICK | 系統時間每過一分鐘發出的廣播 |
ACTION_TIME_CHANGED | 系統時間經過設置發生了變化 |
ACTION_TIMEZONE_CHANGED | 時區改變 |
ACTION_BOOT_COMPLETED | 系統啓動完畢 |
ACTION_PACKAGE_ADDED | 新的應用程序apk包安裝完畢 |
ACTION_PACKAGE_CHANGED | 現有應用程序apk包改變 |
ACTION_PACKAGE_REMOVED | 現有應用程序apk包被刪除 |
ACTION_UID_REMOVED | 用戶id被刪除 |
Intent的Action和Data屬性匹配
Action屬性 | Data屬性 | 說明 |
---|---|---|
ACTION_VIEW | content://contacts/people/1 | 顯示id爲1的聯繫人信息 |
ACTION_DIAL | content://contacts/people/1 | 將id爲1的聯繫人電話號碼顯示在撥號界面中 |
ACITON_VIEW | tel:xxx | 顯示電話爲xxx的聯繫人信息 |
ACTION_VIEW | http://xxx.xxx | 在瀏覽器中瀏覽該網站 |
ACTION_VIEW | file://sdcard/xxx.mp3 | 播放MP3 |
ACTION_VIEW | geo:xxx,xxx | 顯示地圖 |
常見的Category常量:
Category字符串常量 | 描述 |
---|---|
CATEGORY_BROWSABLE | 目標Activity能經過在網頁瀏覽器中點擊連接而激活(好比,點擊瀏覽器中的圖片連接) |
CATEGORY_GADGET | 表示目標Activity能夠被內嵌到其餘Activity當中 |
CATEGORY_HOME | 目標Activity是HOME Activity,即手機開機啓動後顯示的Activity,或按下HOME鍵後顯示的Activity |
CATEGORY_LAUNCHER | 表示目標Activity是應用程序中最優先被執行的Activity |
CATEGORY_PREFERENCE | 表示目標Activity是一個偏心設置的Activity |
常見的Extra常量:
Extra鍵值字符串常量 | 描述 |
---|---|
EXTRA_BCC | 裝有郵件密送地址的字符串數組 |
EXTRA_CC | 裝有郵件抄送地址的字符串數組 |
EXTRA_EMAIL | 裝有郵件發送地址的字符串數組 |
EXTRA_INTENT | 使用ACTION_PICK_ACTIVITY動做時裝有Intent選項的鍵 |
EXTRA_KEY_EVENT | 觸發該Intent的案件的KeyEvent對象 |
EXTRA_PHONE_NUMBER | 使用撥打電話相關的Action時,電話號碼字符串的鍵,類型爲String |
EXTRA_SHORTCUT_ICON | 使用ACTION_CREATE_SHORTCUT在HomeActivity建立快捷方式時,對快捷方式的描述信息。 |
EXTRA_TEXT | 使用ACTION_SEND動做時,用來描述要發送的文本信息,類型爲CharSequence |
EXTRA_TITLE | 使用ACTION_CHOOSER動做時,描述對話框標題的鍵,類型爲CharSequence |
EXTRA_UID | 使用ACTION_UID_REMOVED動做時,描述刪除的用戶id的鍵,類型爲int |
Android.telephony包中的類:
類名 | 描述 |
---|---|
CellLocation | 表示設備位置的抽象類 |
PhoneNumberFormattingTextWather | 監視一個TextView控件,若是有電話號碼輸入,則用formatNumber()方法處理電話號碼 |
PhoneNumberUtils | 包含各類處理電話號碼字符串的使用工具 |
PhoneStateListener | 監視手機中電話狀態變化的監聽類 |
ServiceState | 包含電話狀態和相關的服務信息 |
TelephonyManager | 提供對手機中電話服務信息的訪問 |
與短信服務相關的類主要在包android.telephony.gsm中
類名 | 描述 |
---|---|
GsmCellLocation | 表示GSM手機的基站位置 |
SmsManager | 管理各類短信操做 |
SmsMessage | 表示具體的短信 |