Android開發實踐 Intent

來源:互聯網
上載者:User

標籤:

Intent是應用程式之間通訊的重要媒介,Activity、Service、BroadcastReceiver都是依靠Intent來進行啟動的。

Intent對象大致包含了Component、Action、Category、Data、Type、Extra、Flag這七種屬性。
Component:用於確定指定需求啟動的目標組件
Action:代表該Intent所要完成的一個抽象動作
Category:用於為Action增加額外的附加類別資訊,通常Action會與Category結合使用
Data:通常用於向Action屬性提供操作的資料
Type:用於指定該Data所指定Uri對應的MIME類型
Extra:通常用於在多個Activity之間進行資料交換
Flag:用於為該Intent添加一些額外的控制旗標,Intent可調用addFlags()方法來為Intent添加控制旗標。

下面將介紹Intent對象各屬性的作用:

1.Component屬性

Intent的Component屬性需要接受一個ComponentName對象

// 建立一個ComponentName對象ComponentName comp = new ComponentName(MainActivity.this, TwoActivity.class);Intent intent = new Intent();// 為Intent設定Component屬性intent.setComponent(comp);// Intent intent = new Intent(MainActivity.this, TwoActivity.class);startActivity(intent);

下面來顯示Activity對應Intent的Component屬性的包名、類名

// 擷取該Activity對應的Intent的Component屬性ComponentName comp = getIntent().getComponent();// 顯示該ComponentName對象的包名、類名show.setText("組件包名為:" + comp.getPackageName() + "\n組件類名為:" + comp.getClassName());// 運行結果:組件包名為:com.gc.component// 組件類名為:com.gc.component.TwoActivity
2.Action、Category屬性和intent-filter配置

Android提供的標準Action:Intent.ACTION_VIEW(表示一個抽象的查看操作),具體查看什麼,啟動哪個Activity來查看取決於Activity的intent-filter配置中包含了該ACTION_VIEW,該Activity就有可能被啟動。

1)我們來實現一下點擊按鈕為Intent指定Action跳轉TwoActivity,如下:

// 建立Intent對象Intent intent = new Intent();// 為Intent設定Action屬性(屬性值就是一個一般字元串)intent.setAction("com.gc.intent.action.CRAZYIT_ACTION");startActivity(intent);

接下來配置intent-filter元素(用於配置Activity響應的Intent),intent-filter元素通常包括Action、Category、Data子項目

<activity android:name=".TwoActivity" android:label="@string/app_name">    <intent-filter>        <!-- 指定該Activity能響應Action為指定字串的Intent -->        <action android:name="com.gc.intent.action.CRAZYIT_ACTION" />        <!-- 指定該Activity能響應Action屬性為helloWorld的Intent -->        <action android:name="helloWorld" />        <!-- 指定該Action能響應Category屬性為指定字串的Intent -->        <category android:name="android.intent.category.DEFAULT" />       </intent-filter></activity>

接下來我們在開啟的TwoActivity中擷取該Activity對應的Intent的Category屬性

Set<String> cates = getIntent().getCategories();

2)指定Action、Category調用系統Activity

Android內部提供了大量標準的Action、Category常量,其中用於啟動Activity的標準Action常量及對應的字串如下:

Action常量 對應字串 簡單說明
ACTION_MAIN android.intent.action.MAIN 應用程式入口
ACTION_VIEW android.intent.action.VIEW 顯示指定資料
ACTION_CHOOSER android.intent.action.CHOOSER 顯示一個Activity選取器
ACTION_GET_CONTENT android.intent.action.GET_CONTENT 讓使用者選擇資料,並返回所選的資料
ACTION_DIAL android.intent.action.DIAL 顯示撥號面板
ACTION_CALL android.intent.action.CALL 直接向指定使用者撥打到電話
ACTION_SEARCH android.intent.action.SEARCH 執行搜尋

標準Category常量及對應字串如下:

Category常量 對應字串 簡單說明
CATEGORY_DEFAULT android.intent.category.DEFAULT 預設Category
CATEGORY_BROWSABLE android.intent.category.BROWSABLE 指定該Activity能被瀏覽器安全調用
CATEGORY_TAB android.intent.category.TAB 指定Activity作為TabActivity的Tab頁
CATEGORY_LAUNCHER android.intent.category.LAUNCHER Activity顯示在頂級程式列表中
CATEGORY_INFO android.intent.category.INFO 用於提供包資訊
CATEGORY_HOME android.intent.category.HOME 設定該Activity隨系統啟動而運行
CATEGORY_CAR_DOCK android.intent.category.CAR_DOCK 指定手機被插入汽車硬體時運行該Activity
CATEGORY_DESK_DOCK android.intent.category.DESK_DOCK 指定手機被插入案頭硬體時運行該Activity
CATEGORY_CAR_MODE android.intent.category.CAR_MODE 指定該Activity可在車載環境下使用

3)我們設定一個按鈕,點擊將返回系統Home介面,按鈕的點擊事件如下:

// 建立Intent對象Intent intent = new Intent();// 為Intent設定Action、Category屬性intent.setAction(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_HOME);startActivity(intent);
3.Data、Type屬性

Data通常用於向Action屬性提供操作的資料,Type用於指定該Data所指定Uri對應的MIME類型。
1)Data和Type關係微妙,會相互覆蓋:

Intent先設定Data,後設定Type,那麼Data被覆蓋;Intent先設定Type,後設定Data,那麼Type被覆蓋;如果希望兩者都存在,則應調用Intent的setDataAndType()方法。

Data屬性接收一個Uri對象,一個Uri對象通常表示形式如下:

scheme://host:port/path// 例如:content://com.android.contacts/contacts/123

2)接下來使用Action、Data屬性啟動系統Activity瀏覽指定網頁,點擊事件如下:

// 建立IntentIntent intent = new Intent();String data = "http://www.126.com";// 根據指定字串解析出Uri對象Uri uri = Uri.parse(data);// 為Intent設定Action屬性intent.setAction(Intent.ACTION_VIEW);// 設定Data屬性intent.setData(uri);startActivity(intent);

本篇介紹總結了Android系統中Intent的功能和用法,當Activity應用需要啟動某個組件時,總需要藉助Intent來實現,還有啟動Service、BroadcastReceiver組件也都是由Intent來實現的。

Android開發實踐 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.