日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android】Intent介绍及Intent在Activity中的使用方法

發布時間:2024/4/20 Android 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android】Intent介绍及Intent在Activity中的使用方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本篇博文主要介紹Intent的相關概念,以及Intent在Activity中的使用方法。

?

1.Intent的實現過程

  在Android中,Intent不僅可用于應用程序之間的交互,也可用于應用程序內部的Activity/Service之間的交互。

  Intent負責對應用中一次操作進行描述,描述內容包括動作以及動作所涉及的數據,Android中的Intent機制則根據此描述,找到對應的組件,將Intent傳遞給該被調用組件,完成對組件的一次調用。

  這便是Intent的實現過程,可見,在Intent中提供了組件互相調用的相關信息,實現了調用者與被調用者之間的解耦。

2.Intent的應用場合

  歸納起來,Intent的應用場合主要有以下三種:

2.1啟動一個Activity

  (1)Activity.startActivity(Intent?intent);  //啟動一個Activity

  (2)Activity.startActivityForResult(Intent?intent,?int?requestCode);  //啟動一個帶請求碼的Activity,當該Activity結束時將回調原Activity的onActivityResult()方法,并返回一個結果碼。

2.2啟動一個Service

  (1)Context.startService(Intent?service);?

  (2)Context.bindService(Intent?service,?ServiceConnection?conn,?int?flags);?

2.3啟動一個Broadcast

  (1)sendBroadcast(Intent?intent);?

?    sendBroadcastAsUser(Intent?intent,?UserHandle?user);?

  (2)sendStickyBroadcast(Intent?intent);?

?????  ? sendStickyBroadcastAsUser(Intent?intent,?UserHandle?user);?

  (3)sendOrderedBroadcast(Intent?intent,?String?receiverPermission);?

    ? sendOrderedBroadcastAsUser(Intent?intent,?UserHandle?user,?String?receiverPermission,

?BroadcastReceiver?resultReceiver,Handler?scheduler,?int?initialCode,?String?initialData,?Bundle?initialExtras);?

?

3.Intent屬性設置

  Intent的屬性設置包括:Action(要執行的動作)、Data(執行動作所操作的數據)、Type(顯式的指定Intent的數據類型)、Category(執行動作的附加信息)、Component(指定Intent目標組件的類名稱)、Extras(其它所有附加信息的集合)。????

3.1?Action(要執行的動作)

  在SDK中定義了一系列標準動作,其中的一部分如圖1所示。

圖1?部分標準動作

  其中,ACTION_CALL表示調用撥打電話的應用;ACTION_EDIT表示調用編輯器;ACTION_SYNC表示同步數據。

3.2?Data(執行動作所操作的數據)

  在Intent中,Data使用指向數據的URI來表示。比如,在聯系人應用中,指向聯系人列表的URI是content://contacts/people/。

3.3?Type(顯式的指定Intent的數據類型)

  對于不同的動作,其URI數據的類型是不同的。

  通常,Intent的數據類型能夠根據其數據本身進行判定,但是通過設置這個屬性,可以強制采用顯式指定的類型。

3.4?Category(執行動作的附加信息)

  Category表示執行動作的附加信息。比如,當我們想要讓所執行的動作被接收后,作為頂級應用而位于其他所有應用的最上層,并可以使用附加信息LAUNCHER_CATEGORY來實現。?

3.5?Component(指定Intent目標組件的類名稱)

  Component用于指定Intent目標組件的類名稱。通常,Android會根據Intent?中所包含的其它屬性信息(比如Action、Data/Type、Category)進行查找,并找到一個與之匹配的目標組件。但是,如果我們設置了Component屬性,明確的指定了Intent目標組件的類名稱,那么上述查找過程將不需要執行。?

3.6?Extras(其它所有附加信息的集合)

  使用extras可以為組件提供擴展信息。

4.Intent解析過程

  在使用Intent時,根據是否明確的指定Intent對象的接收者,而分為兩種情況。一種是顯式的Intent,即在構造Intent對象時就指定其接收者;另一種是隱式的Intent,即在構造Intent對象時,并不指定其接收者。

  對于顯式的Intent來說,Android不需要解析Intent,因為目標組件已經很明確。對于隱式的Intent來說,Android需要對其進行解析,通過解析,將Intent映射給可以處理該Intent的Activity、Service或Broadcast。????????

  Intent解析機制是通過查找注冊在AndroidManifest.xml文件中的所有IntentFilter,以及IntentFilter所定義的Intent,找到最匹配的Intent。

  在解析過程中,Android通過判斷Intent的Action、Type、Category這三個屬性,從而找出最匹配的Intent,具體的判斷方法如下:

  (1)如果Intent指明了Action,則目標組件IntentFilter的Action列表中就必須包含有這個Action,否則不能匹配;

  (2)如果Intent沒有提供Type,系統將從Data中得到數據類型。目標組件的數據類型列表中必須包含Intent的數據類型,否則不能匹配。

  (3)如果Intent中的數據不是content:?URI,而且Intent也沒有明確指定它的Type,將根據Intent中數據的scheme?(比如?http:?或者mailto:)?進行匹配。同理,Intent?的scheme必須出現在目標組件的scheme列表中,否則不能匹配。

  (4)如果Intent指定了一個或多個Category,這些類別必須全部出現在目標組件的類別列表中,否則不能匹配。

?

5.Intent使用實例

  下面介紹幾個使用Intent的實例。

5.1調用其他的應用

  通過Intent可以調用并啟動別的應用程序,比如調用撥打電話的程序,便可以使用如下的方法來完成:

1   /* 2   * Function : 調用撥打電話的程序 3   * Author : 博客園-依舊淡然 4   */ 5   public void intentDemo_Call() { 6    Intent intent_call = new Intent(); //創建一個意圖 7    intent_call.setAction(Intent.ACTION_CALL); //設置意圖為打電話 8    intent_call.setData(Uri.parse("tel:110")); //設置電話號碼 9    startActivity(intent_call); //啟動意圖 10   }

  當然了,因為這里使用到了打電話的功能,我們還需要在AndroidManifest.xml文件中,添加申請打電話的資源權限,具體實現方法如下:

1   <!-- 打電話的權限 --> 2 <uses-permission
      android:name="android.permission.CALL_PHONE" />

  有關Android中的權限請求可以參閱《Android數據手冊02:android.permission權限請求匯總》。

5.2跳轉到另一個Activity

  通過使用Intent不僅可以調用別的應用程序,還可以實現應用程序內部之間Activity的跳轉。比如如下的代碼便實現了從MainActivity跳轉到SecondaryActivity,并向SecondaryActivity中傳遞了兩個數據name和age。

1 /* 2 * Function : 跳轉到SecondaryActivity 3 * Author : 博客園-依舊淡然 4 */ 5 public void intentDemo_GoToSecondaryActivity() { 6 Intent intent_toSecondary = new Intent(); //創建一個意圖 7 intent_toSecondary.setClass(this, SecondaryActivity.class); //指定跳轉到SecondaryActivity 8 intent_toSecondary.putExtra("name", "jack"); //設置傳遞內容name 9 intent_toSecondary.putExtra("age", 23); //設置傳遞內容age 10 startActivity(intent_toSecondary); //啟動意圖 11 }

  那么,如何在SecondaryActivity中接收從MainActivity中傳過來的內容(name、age)呢?下面的代碼給出了一種實現方案。

1   /* 2 * Function : 接收mainActivity中的intent_toSecondary 3 * Author : 博客園-依舊淡然 4 */ 5 public void acceptIntent() { 6 Intent intent_accept = getIntent(); //創建一個接收意圖 7 Bundle bundle = intent_accept.getExtras(); //創建Bundle對象,用于接收Intent數據 8 String name = bundle.getString("name"); //獲取Intent的內容name 9 int age = bundle.getInt("age"); //獲取Intent的內容age 10 }

5.3發送一個帶回調方法的意圖

  有時,我們可能需要通過定義在MainActivity中的某一控件來啟動SecondaryActivity,并且當SecondaryActivity結束時,返給MainActivity一個執行結果。

  要實現上述的功能,只需要完成以下三步驟即可。

  (1)在MainActivity中實現向SecondaryActivity發送帶請求碼的意圖,具體實現方法如下:

1   /* 2 * Function : 向SecondaryActivity發送帶請求碼的意圖 3 * Author : 博客園-依舊淡然 4 */ 5 public void intentDemo_request() { 6 Intent intent_request = new Intent(); //創建一個意圖 7 intent_request.setClass(this, SecondaryActivity.class); //指定跳轉到SecondaryActivity 8 startActivityForResult(intent_request, REQUEST_CODE); //啟動帶請求碼意圖 9 }

  (2)在SecondaryActivity中接收intent_request,并向意圖中填充要返給MainActivity的內容,最后還需要設置一個返回碼。具體的實現方法如下:

1   /* 2 * Function : 接收mainActivity中的intent_request并返回一個結果碼 3 * Author : 博客園-依舊淡然 4 */ 5 public void acceptIntentAndReturn() { 6 Intent intent = getIntent(); //創建一個接收意圖 7 intent.putExtra("back", "data of SecondaryActivity"); //設置意圖的內容 8 setResult(RESULT_CODE, intent); //設置結果碼 9 finish(); //結束SecondaryActivity,并返回MainActivity 10 }

  (3)當結束SecondaryActivity時,程序將返回到MainActivity界面。此時,MainActivity中的onActivityResult()方法將被回調,而我們要做的就是實現該方法。在本示例中,該方法的具體實現方法如下:

1   /* 2 * Function : onActivityResult回調方法 3 * Author : 博客園-依舊淡然 4 */ 5 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 6 if(requestCode == REQUEST_CODE && resultCode == SecondaryActivity.RESULT_CODE) { 7 Bundle bundle = data.getExtras(); 8 String str = bundle.getString("back"); 9 Toast.makeText(this, "從SecondaryActivity的返回值為:" + str, Toast.LENGTH_LONG).show(); 10 } 11 }

  以上的代碼,我們通過判斷requestCode和resultCode便可以唯一的確定MainActivity中的調用者和SecondaryActivity中的被調用者,建立起了一一對應的關系。并且,我們通過Bundle對象獲取了從SecondaryActivity中返回給MainActivity的內容,并通過Toast進行了輸出,如圖2所示。

圖2?從SecondaryActivity中返回的內容

  由圖2可見,從SecondaryActivity中返回的內容正是我們在SecondaryActivity中定義的字符串“data?of?SecondaryActivity”。

6.總結

  本篇博文主要介紹了Intent的相關概念,以及Intent在Activity中的三種使用方法。有關Intent在Service和Broadcast中的使用方法,將在后續的Service和Broadcast的學習過程中再做介紹。

?

作者:依舊淡然 郵箱:menlsh@163.com 博客:http://www.cnblogs.com/menlsh/ 本文版權歸作者所有,未經作者同意,嚴禁轉載及用作商業傳播,否則將追究法律責任。

總結

以上是生活随笔為你收集整理的【Android】Intent介绍及Intent在Activity中的使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩久草 | 美女网站全黄 | www国产在线观看 | 久久久久亚洲精品中文字幕 | 欧美黄色一级视频 | 肉肉av福利一精品导航 | 亚洲精品黄色片 | h网址在线观看 | 久久久激情网 | 日韩区一区二 | 九九久久九九久久 | 日韩在线视频网 | 最新中文字幕在线观看视频 | 在线欧美日韩 | 日本猛少妇色xxxxx | 亚洲AV无码成人精品区先锋 | 尤物视频最新网址 | 翔田千里一区二区 | 国产叼嘿视频在线观看 | 免费三级网 | 国产精品一区免费 | 人妻少妇精品一区二区三区 | 久久久国产打桩机 | 国产四区 | 国产高清在线视频观看 | 玖玖成人 | 91麻豆产精品久久久久久 | 中文字幕在线亚洲 | 小泽玛利亚一区二区三区 | 爱爱短视频| www.色网| 欧美交换配乱吟粗大25p | 香蕉av777xxx色综合一区 | 91丨九色丨蝌蚪丨对白 | 97超碰人人网 | 国产精品手机在线观看 | 蜜桃精品噜噜噜成人av | 日韩视频一区在线观看 | 91午夜精品亚洲一区二区三区 | 久久精品夜色噜噜亚洲a∨ 中文字幕av网 | 91麻豆网 | 自由 日本语 热 亚洲人 | 成人免费午夜 | 国产日韩精品视频 | 久久亚洲色图 | 嫩草视频免费观看 | 不卡av在线免费观看 | 开心激情播播网 | 欧美另类xxxx | 咪咪色在线视频 | 日韩在线一区二区三区四区 | 亚洲免费精品视频 | av在线视屏 | 亚洲三级在线 | 精品国产无码一区二区 | 男女视频一区二区 | 国产欧美精品aaaaaa片 | 五月婷婷综| 99久久亚洲精品 | 我要看一级黄色片 | www爱爱| 国产欧美日韩激情 | 一区二区三区毛片 | 又色又爽又黄 | 国产精品果冻传媒潘 | 成人香蕉网 | 少妇性l交大片免潘金莲 | 熟妇人妻无乱码中文字幕真矢织江 | 琪琪色综合 | av免费在线观看网址 | 香蕉视频1024| 91网站在线观看视频 | 精品国产一区二区三区四区精华 | 天堂аⅴ在线最新版在线 | 性色av网址 | 亚洲成人精 | 激情第一页| 欧美精品日韩在线 | 国产精品毛片va一区二区三区 | 综合网五月 | 天堂欧美城网站网址 | 日韩精品一区二区三区免费视频 | 美女av网址 | 婷婷麻豆 | 国产一区自拍视频 | 亚洲av无码乱码国产精品fc2 | 直接看的av | 日韩一区2区 | 五月婷婷伊人网 | 麻豆视频精品 | 亚洲热av| 波多野吉衣av | 成人mv在线观看 | 深夜精品| 男人操女人下面视频 | 国产美女明星三级做爰 | 青青青在线视频免费观看 | 国产精品夫妻自拍 | 天天色网站 |