標籤:android style blog http color 使用 strong io
前言
在講解Intent之前,先來回顧下之前在哪些方面接觸過這東西:
(1)啟動Activity:startActivity(Intent intent); startActivityForResult(Intent intent);
(2)發送廣播: Context.sendBroadcast(Intent intent); Contxt.sendOrderBroadcast(Intent intent);
(3)啟動或綁定Service: Context.startService(Intent intent); Context.bindService(Intent intent);
由此可見,android的三大組件都是通過Intent進行啟用和各組件間進行資料轉送,那麼何為Intent?!
Intent簡介
Intent是android程式中傳輸資料的核心對象,Intent在官方文檔中的定義為:執行某操作的一個抽象描述。這個定義理解起來不是很直觀。個人更喜歡這個定義:Intent負責對應用中一次操作的動作、動作涉及的資料、附加資料進行描述。Intent起著一個媒體中介的作用,專門提供組件互相調用的相關資訊,實現調用者與被調用者之間的解耦。
Intent構成
(1)ComponentName
組件名稱用來指定為處理Intent對象的組件,可以通過以下三種方法進行設定:
a) intent.setComponent(SecondActivity) 參數為要設定的組件名稱
b) intent.setClass(MainActivity.this,SecondActivity.class) 第一個參數為當前Activity的this對象,第二個參數為要開啟的Activity的class對象
c) intent.setClassName(MainActivity.this,SecondActivity) 第一個參數為當前Activity的this對象,第二個參數為要開啟的Activity類對象
(2)Action
用來指明要實施的動作是什麼,很大程度上決定了Intent的構建,一些常用的動作如下:
ACTION_CALL activity 啟動一個電話.
ACTION_EDIT activity 顯示使用者編輯的資料.
ACTION_MAIN activity 作為Task中第一個Activity啟動
ACTION_SYNC activity 同步手機與資料服務器上的資料.
ACTION_BATTERY_LOW broadcast receiver 電池電量過低警告.
ACTION_HEADSET_PLUG broadcast receiver 插拔耳機警告
ACTION_SCREEN_ON broadcast receiver 螢幕變亮警告.
ACTION_TIMEZONE_CHANGED broadcast receiver 改變時區警告.
除了官方給出的一些常用動作外,使用者也可以自訂自己的動作,自訂動作字串應包含程式包名的首碼,如com.example.alarm.xxx
設定動作: intent.setAction(String action) 擷取動作: intent.getAction(String action)
(3)Data
資料是作用在Intent上的資料的URI(通用資源標示符)和資料的MIME類型(登入的資料類型主要有:application,audio,example,message,model,multipart,text,video),不同的動作有不同的資料規格。
設定資料:intent.setData(Uri.parse("tel:18620390143"))//設定要撥打的號碼
(4)Extra
附加資料用來為Intent添加附加資訊:
設定附加資料: intent.setExtra("name","張光源") 第一個參數為附加資訊名稱,第二個參數為附加資訊值
擷取附加資料: intent.getExtra("name") 根據附加資訊名稱,擷取相應資料值
(5)IntentFilter
隱式Intent(並不指明目標組件名稱)需要通過過濾器<intent-filter>進行解析,一個過濾器對英語Intent對象的動作、資料、種類,過濾器需要檢測隱式Intent的這三個欄位,其中任何一個失敗,則為解析失敗。然而一個組件可以擁有多個過濾器,在這個過濾器上解析失敗,有可能在其它過濾器解析成功。過濾器的使用如下:
<intent-filter> <action android:name="android.intent.action.MAIN" /> <data android:mimeType="video/mpeg" android:scheme="http"> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
目前所接觸到的Intent操作都是顯式Intent(指定compoment),所以對Intent的解析方面瞭解還不夠深入,待後期有更深理解再進行補充。
附:經常接觸的Intent執行個體:
Intent intent=new Intent(MainActivity.this,MyAlarmReceiver.class);//指定跳轉的Inetent intent.setAction("com.example.action.setalarm");//指定intent的action sender=PendingIntent.getBroadcast(MainActivity.this,0,intent,PendingIntent.FLAG_UPDATE_CURRENT);//指定PendingIntent
Intent it=new Intent(context,AlarmMessage.class);//定製要跳轉的activity it.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // 傳遞一個新的任務標記 context.startActivity(it);//啟動Intent