Android入門篇(六)Intent詳解

在上一篇中,咱們瞭解到,Intent實現跳轉,須要設置一個target,就是找到對應Activity的一個標誌。而這個標誌能夠是一個class,或者是一個Action。前者能夠稱之爲顯示跳轉,然後者就是隱式的跳轉了。
Intent能夠啓動Activity,啓動Service,或者是發送一個廣播信息。下面就介紹一下Intent的相關知識。android

Intent相關屬性

  • 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

    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);
  • Extras
    一般用於多個組件之間的數據交換,Extras的屬性是一個Bundle對象,經過鍵值對進行數據的存儲。若是傳遞單個變量,能夠經過putIntExtra()放置參數、經過getIntExtra()讀取參數,也能夠傳遞Bundle對象intent.putExtras()、經過getExtras()獲取Bundle。
  • Flags

主要是用於標記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 表示具體的短信
相關文章
相關標籤/搜索