自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android Intent七大屬性,構(gòu)建高效應(yīng)用間通信的關(guān)鍵

移動開發(fā) Android
Intent 的 Action 屬性是一個字符串,描述了Intent想要執(zhí)行的操作或動作。在隱式Intent中特別重要,可以幫助Android系統(tǒng)確定哪個組件(如Activity、Service或BroadcastReceiver)能夠處理這個Intent。

在Android開發(fā)中,Intent 是一個核心組件,用于在應(yīng)用程序內(nèi)部或不同應(yīng)用程序之間傳遞消息和數(shù)據(jù)。Intent的七大屬性:

  • 「Action」:描述了要執(zhí)行的操作。
  • 「Data」:Uri對象,指定了操作的數(shù)據(jù)位置。
  • 「Category」:為Intent提供額外的信息,幫助系統(tǒng)更準確地確定如何處理Intent。
  • 「Extras」:一個鍵值對的集合,用于傳遞額外的數(shù)據(jù)。
  • 「Type」:指定數(shù)據(jù)的MIME類型。
  • 「Component」:對于顯式Intent,指定了要啟動的組件的類名。
  • 「Flags」:指定如何處理Intent的標志。

Action屬性

Intent 的 Action 屬性是一個字符串,描述了Intent想要執(zhí)行的操作或動作。在隱式Intent中特別重要,可以幫助Android系統(tǒng)確定哪個組件(如Activity、Service或BroadcastReceiver)能夠處理這個Intent。

圖片圖片

Android SDK定義了一系列標準的Action字符串,例如:

  • Intent.ACTION_VIEW: 用于顯示由數(shù)據(jù)URI指定的數(shù)據(jù)(如網(wǎng)頁、圖片等)。
  • Intent.ACTION_EDIT: 用于編輯由數(shù)據(jù)URI指定的數(shù)據(jù)。
  • Intent.ACTION_DIAL: 撥打一個電話號碼,但不實際建立連接。
  • Intent.ACTION_CALL: 撥打一個電話號碼,并嘗試建立連接。注意:此操作需要用戶確認,并且可能需要特殊的權(quán)限。
  • Intent.ACTION_SEND: 發(fā)送某種數(shù)據(jù)。這通常用于分享文本、圖片等。
  • Intent.ACTION_SENDTO: 發(fā)送消息到特定的收件人(如電子郵件地址)。
  • Intent.ACTION_GET_CONTENT: 允許用戶選擇一個數(shù)據(jù)項返回給調(diào)用者。
  • Intent.ACTION_SYNC: 觸發(fā)一個同步操作。
  • Intent.ACTION_SEARCH: 執(zhí)行一個搜索。
  • Intent.ACTION_MAIN: 這是一個特殊的類別,通常與CATEGORY_LAUNCHER結(jié)合使用,表示應(yīng)用的入口點。

除了這些標準動作外,也可以定義自己的自定義動作字符串??梢允褂肐ntent的構(gòu)造函數(shù)或setAction()方法:

// 使用構(gòu)造函數(shù)設(shè)置Action
Intent intent = new Intent(Intent.ACTION_VIEW);

// 自定義Action
Intent intent = new Intent("自定義Action");

// 或使用setAction()方法設(shè)置Action
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);

當使用隱式Intent時,除了設(shè)置Action外,還可能需要設(shè)置其他屬性(如Category、Type、Data等)來確保Intent被正確地處理。

Data屬性

Intent的Data屬性是一個Uri對象,指定了與Intent相關(guān)聯(lián)的數(shù)據(jù)的位置或類型。Uri可以是一個指向文件、網(wǎng)頁、電子郵件地址等的引用。

圖片圖片

Data屬性在隱式Intent中特別重要,與Action屬性一起幫助Android系統(tǒng)確定哪個組件(如Activity、Service或BroadcastReceiver)能夠處理這個Intent。

使用setData()方法來設(shè)置Intent的Data屬性:

Uri data = Uri.parse("https://www.baidu.com");
Intent intent = new Intent();
intent.setData(data);

在創(chuàng)建Intent對象時直接設(shè)置Data屬性:

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://www.baidu.com"));

Intent的Action屬性被設(shè)置為Intent.ACTION_VIEW,表示想要查看某個數(shù)據(jù)。Data屬性被設(shè)置為一個指向網(wǎng)頁的Uri,表示要查看的數(shù)據(jù)是網(wǎng)頁。

除了Data屬性外,Intent還有一個Type屬性,指定了Data屬性中URI所指向的數(shù)據(jù)的MIME類型。在大多數(shù)情況下,當設(shè)置了Data屬性后,Android系統(tǒng)會自動推斷出Type屬性的值。如果需要明確指定MIME類型,可以使用setType()方法或setDataAndType()方法來設(shè)置Type屬性。

Category屬性

Intent的Category屬性是一個字符串,用于為Intent增加額外的附加信息或指定當前動作(Action)被執(zhí)行的環(huán)境。Category屬性用于進一步描述Intent的性質(zhì)或用途,幫助系統(tǒng)更準確地確定哪個組件能夠處理這個Intent。

圖片圖片

Android SDK定義了一些標準的Category常量:

  • Intent.CATEGORY_DEFAULT:默認的類別,通常與Action一起使用,表示沒有特定的類別信息。
  • Intent.CATEGORY_BROWSABLE:表示這個Intent可以用來瀏覽數(shù)據(jù),例如啟動一個網(wǎng)頁瀏覽器來查看一個網(wǎng)頁。
  • Intent.CATEGORY_LAUNCHER:這是一個特殊的類別,通常與Action.MAIN一起使用,表示應(yīng)用的入口點。

除了這些標準類別外,也可以定義自己的自定義類別字符串。使用addCategory()方法來為Intent添加Category屬性:

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://www.baidu.com"));
intent.addCategory(Intent.CATEGORY_BROWSABLE);

Intent的Action屬性被設(shè)置為Intent.ACTION_VIEW,表示想要查看某個數(shù)據(jù)。Data屬性被設(shè)置為一個指向網(wǎng)頁的Uri,表示要查看的數(shù)據(jù)是網(wǎng)頁。Category屬性被設(shè)置為Intent.CATEGORY_BROWSABLE,表示這個Intent可以用來瀏覽數(shù)據(jù),因此系統(tǒng)可能會選擇一個網(wǎng)頁瀏覽器來處理這個Intent。

Category屬性通常與Action屬性結(jié)合使用。在某些情況下,如果Intent沒有指定正確的Category,那么即使Action匹配,系統(tǒng)也可能無法找到合適的組件來處理這個Intent。在創(chuàng)建隱式Intent時,確保設(shè)置了正確的Action和Category屬性非常重要。

Extras屬性

Intent的Extras屬性是一個用于傳遞目標組件所需要的額外數(shù)據(jù)的集合。數(shù)據(jù)通常是以鍵值對(key-value pair)的形式存儲的,可以通過putExtra()方法添加到Intent中,并在目標組件中使用getXXX()系列方法(如getStringExtra(), getIntExtra(), getParcelableExtra()等)來檢索??梢允褂肊xtras來傳遞字符串、整數(shù)、布爾值、序列化對象等幾乎任何類型的數(shù)據(jù)。

圖片

Intent intent = new Intent(MainActivity.this, UserActivity.class);
intent.putExtra("name", "Reathin");
intent.putExtra("age", 29);
startActivity(intent);

在UserActivity中獲取數(shù)據(jù):

String name = getIntent().getStringExtra("name");
int age = getIntent().getIntExtra("age", 0);

Type屬性

Intent的Type屬性(也稱為Data Type或MIME類型)用于指定與Intent相關(guān)聯(lián)的數(shù)據(jù)的MIME類型。Type屬性通常與Data屬性一起使用,Data屬性指定了數(shù)據(jù)的URI,Type屬性指定了數(shù)據(jù)的MIME類型。通過設(shè)置這兩個屬性,可以更精確地控制哪個組件應(yīng)該接收并處理這個Intent。

使用setType()方法來設(shè)置Intent的Type屬性:

Intent intent = new Intent(Intent.ACTION_VIEW);
Uri imageUri = Uri.parse("content://media/external/images/media/4");
intent.setData(imageUri);
intent.setType("image/jpeg");
startActivity(intent);

啟動這個Intent,系統(tǒng)將會找到一個能夠處理JPEG圖片的活動來顯示這個圖片。

雖然Type屬性在某些情況下是可選的,但在某些情況下卻是必需的。例如,如果想要啟動一個能夠處理特定類型數(shù)據(jù)的Service或BroadcastReceiver,就需要設(shè)置正確的Type屬性來確保系統(tǒng)能夠找到正確的目標組件。

Component屬性

Intent的Component屬性用于明確指定需要啟動的目標組件。通常是一個包含了目標組件包名和類名的ComponentName對象。

圖片圖片

設(shè)置Component屬性后,Android系統(tǒng)將會直接啟動指定的組件,不再根據(jù)Intent的其他屬性(如Action、Data、Category等)來查找匹配的組件。Intent的解析過程更加明確和直接。

ComponentName類可以通過以下方式創(chuàng)建:

  1. ComponentName(String pkg, String cls):通過包名和類名創(chuàng)建一個ComponentName對象。
ComponentName componentName = new ComponentName("com.reathin.sample", "com.reathin.sample.MainActivity");
Intent intent = new Intent();
intent.setComponent(componentName);
  1. ComponentName(Context pkg, String cls):通過Context對象和類名創(chuàng)建一個ComponentName對象。
Context context = getApplicationContext();
ComponentName componentName = new ComponentName(context, MainActivity.class);
Intent intent = new Intent();
intent.setComponent(componentName);
  1. ComponentName(Context pkg, Class<?> cls):通過Context對象和類對象創(chuàng)建一個ComponentName對象。

設(shè)置了Component屬性的Intent被稱為顯式Intent,沒有設(shè)置Component屬性的Intent被稱為隱式Intent,系統(tǒng)需要根據(jù)Intent的其他屬性來查找匹配的組件。

Flags屬性

Intent的Flags屬性在Android中用于設(shè)置啟動Activity或其他組件時的一些行為特性。Flags可以影響Intent如何被解析、組件如何被啟動以及組件之間的交互方式。

圖片圖片

  1. 「FLAG_ACTIVITY_NEW_TASK」:通常用于從非Activity的上下文(如廣播接收器、服務(wù)或應(yīng)用外部)啟動Activity。當設(shè)置了這個標志時,系統(tǒng)會在一個新的任務(wù)(Task)中啟動Activity,即使這個Activity已經(jīng)在另一個任務(wù)中存在。如果找到一個與Activity具有相同affinity的任務(wù),則將其整體移動到前臺,并保持棧中的狀態(tài)不變,然后將Activity壓入棧中。
  2. 「FLAG_ACTIVITY_CLEAR_TOP」:當Intent對象包含這個標志時,如果在棧中發(fā)現(xiàn)存在與要啟動的Activity相同實例的Activity,則系統(tǒng)會清除這個實例之上的所有Activity,使該實例處于棧頂。這通常用于確保用戶返回到應(yīng)用的特定Activity時,應(yīng)用的狀態(tài)是清晰的。
  3. 「FLAG_ACTIVITY_SINGLE_TOP」:如果這個標志被設(shè)置,當新的Activity被啟動時,如果它已經(jīng)在任務(wù)棧的棧頂,系統(tǒng)不會創(chuàng)建一個新的Activity實例,而是會復(fù)用已存在的實例,并通過調(diào)用它的onNewIntent()方法來傳遞新的Intent。
  4. 「FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS」:表示不希望啟動的Activity出現(xiàn)在最近使用的應(yīng)用列表中。這對于一次性或隱私敏感的活動可能很有用。

這些標志可以單獨使用,也可以組合使用,以定義特定的行為。使用Intent類的addFlags()或setFlags()方法設(shè)置Flags屬性。

Intent intent = new Intent(MainActivity.this, UserActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

或者:

Intent intent = new Intent(MainActivity.this, UserActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

責(zé)任編輯:武曉燕 來源: 沐雨花飛蝶
相關(guān)推薦

2020-11-23 18:39:54

容器Kubernetes架構(gòu)

2018-04-11 14:13:29

物聯(lián)網(wǎng)信息技術(shù)互聯(lián)網(wǎng)

2021-07-17 15:48:13

Rust編程語言關(guān)鍵字

2016-10-27 14:02:56

大數(shù)據(jù)數(shù)據(jù)庫

2016-10-26 14:40:28

大數(shù)據(jù)基礎(chǔ)設(shè)施架構(gòu)

2010-03-29 17:08:04

Nginx squid

2019-09-26 05:30:03

物聯(lián)網(wǎng)通信協(xié)議IOT

2018-09-27 11:48:51

2025-04-03 07:30:00

JavaWeb開發(fā)微服務(wù)

2021-09-30 14:06:08

安全團隊網(wǎng)絡(luò)攻擊首席信息安全官

2024-07-31 16:04:14

2016-10-12 19:14:31

2024-09-04 08:31:01

語言模型設(shè)計

2010-12-30 14:52:33

云基礎(chǔ)設(shè)施

2011-01-13 13:48:52

Android 3.0

2011-08-01 09:51:20

云計算

2022-06-17 09:58:23

JVM應(yīng)用程序

2012-12-04 18:11:46

LanSecS堡壘主機堡壘機

2022-11-07 14:31:26

物聯(lián)網(wǎng)IoT

2016-11-08 22:47:09

大數(shù)據(jù)英國政府大數(shù)據(jù)應(yīng)用
點贊
收藏

51CTO技術(shù)棧公眾號