基礎篇:5.熟練掌握Intent機制

來源:互聯網
上載者:User

標籤: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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.