Intent 使用詳解

和您一起終身學(xué)習(xí),這里是程序員Android

本篇文章主要介紹 Android 開發(fā)中的部分知識點,通過閱讀本篇文章,您將收獲以下內(nèi)容:

一、Intent 簡介
二、Intent 主要用途
三、Intent 分類
四、隱式Intent 接收過濾標(biāo)簽
五、PendingIntent 介紹
六、Intent的七大屬性
七、使用ADB調(diào)試 Intent

一、Intent 簡介

Intent 是一個消息傳遞對象,主要用于組件之間的通訊,例如:啟動Activity、啟動Service、傳遞Broadcast等。

Intent 主要功能流程圖如下:

Intent 主要功能流程圖

二、 Intent 主要用途

1. 啟動Activity

  • startActivity()
    無返回值,直接啟動Activity

  • startActivityForResult()
    有返回值,返回值在onActivityResult() 回調(diào)

2. 啟動Service

  • startService()
    一次性操作

  • bindService()
    綁定組件,隨組件生命周期結(jié)束而結(jié)束

3. 發(fā)送Broadcast

  • sendBroadcast()
    普通無序廣播

  • sendOrderedBroadcast()
    有序廣播

  • sendStickyBroadcast()
    持續(xù)黏性廣播

三、 Intent 分類

1.顯示 Intent

按名稱(完全限定類名)指定要啟動的組件。
例如:

                    Intent intentActivity = new Intent(MainActivity.this,
                            ActivityMethods.class);
                    startActivity(intentActivity);

2.隱式 Intent

不會指定特定的組件,而是聲明要執(zhí)行的常規(guī)操作,從而允許其他應(yīng)用中的組件來處理它
例如:

    /**
     * 發(fā)送短信
     * **/
    public static void SendMms(Context context, String mmsString) {

        Intent sendIntent = new Intent();
        sendIntent.setAction(Intent.ACTION_SEND);
        sendIntent.putExtra(Intent.EXTRA_TEXT, mmsString);
        sendIntent.setType("text/plain");
        // sendIntent.setData(Uri.parse("smsto:"));
        // This ensures only SMS apps respond
        // 修改 Intnent 選擇器Tittle
        String title = context.getResources().getString(R.string.hello_world);
        Intent chooser = Intent.createChooser(sendIntent, title);

        // 驗證是否有Activity 接收
        if (sendIntent.resolveActivity(context.getPackageManager()) != null) {
            context.startActivity(chooser);
        }
    }

四、 隱式Intent 接收過濾標(biāo)簽

應(yīng)用可以接收哪些隱式Intent,請在清單文件中使用 <intent-filter>元素為每個應(yīng)用組件聲明一個或多個 Intent過濾器。每個Intent 過濾器均根據(jù) Intent的操作、數(shù)據(jù)和類別指定自身接受的Intent類型。 僅當(dāng)隱式Intent 可以通過Intent過濾器之一傳遞時,系統(tǒng)才會將該 Intent傳遞給應(yīng)用組件。

1. <action>

name屬性中,聲明接受的 Intent操作。該值必須是操作的文本字符串值,而不是類常量。

例如:
java 代碼中啟動的IntentAction

Intent sendIntent = new Intent("String_action");

Androidmanfest.xml 中過濾標(biāo)簽如下:

Androidmanfest 標(biāo)簽聲明

2.<data>

使用一個或多個指定數(shù)據(jù) URI 各個方面(scheme、host、port、path等)和 MIME 類型的屬性,聲明接受的數(shù)據(jù)類型。

3.<category>

name 屬性中,聲明接受的Intent 類別。該值必須是操作的文本字符串值,而不是類常量。

例如:

category 屬性使用

4. 禁止其他應(yīng)用通過Intent 掉起自己組件

android:exported="false"

5. 應(yīng)用主要入口點Action

<action android:name="android.intent.action.MAIN" />

6. Launcher 圖標(biāo)入口Action

以下兩個元素必須配對使用,Activity才會顯示在應(yīng)用啟動器中。

Launcher 標(biāo)簽入口

7.注意:

CATEGORY_LAUNCHER 類別指示此 Activity的圖標(biāo)應(yīng)放入系統(tǒng)的應(yīng)用啟動器。 如果<activity>元素未使用 icon指定圖標(biāo),則系統(tǒng)將使用<application>元素中的圖標(biāo)

五、PendingIntent 介紹

PendingIntent對象是Intent對象的包裝器。PendingIntent 的主要目的是授權(quán)外部應(yīng)用使用包含的 Intent,就像是它從您應(yīng)用本身的進程中執(zhí)行的一樣。

主要應(yīng)用于以下場景

  • 1.通知 NotificationManager
  • 2.應(yīng)用小部件 AppWidget
  • 3.定時任務(wù) AlarmManager

1. PendingIntent 使用注意事項:

  • 1.PendingIntent.getActivity()
    適用于啟動 ActivityIntent。
  • 2.PendingIntent.getService()
    適用于啟動ServiceIntent。
  • 3.PendingIntent.getBroadcast()
    適用于啟動 BroadcastReceiverIntent

六、Intent的七大屬性

1 . Component Name(目標(biāo)組件的全類、組件名稱)

setComponent(),
getComponent(),
setClass() ,
setClassName()

2 . Action (intent 將執(zhí)行的動作)

setAction()
getAction()

3 . Data (用于向Action 屬性提供操作數(shù)據(jù))

URI對象scheme://host:port/path (協(xié)議頭,主機,端口,路徑)

4 . Type 分類

指定Data所指定的Uri對應(yīng)的MIME類型,不指定會根據(jù)數(shù)據(jù)自動推導(dǎo)

5 . Category 類別

Action 提供額外的附件類別信息,可以有多個Category,但必須有一個default

   <!-- 默認分類必須加上,否則會報錯 -->
<category android:name="android.intent.category.DEFAULT"/>

6 . Extra 數(shù)據(jù)載體

通過鍵值對進行數(shù)據(jù)存儲,用于多個Action之間提供數(shù)據(jù)交換.

7 . Flags 標(biāo)記

標(biāo)記組件如何啟動,以及啟動后如何對待FALG_ACTIVITY_SINGLE_TOP
FALG_ACTIVITY_CLEAR_TOP等等)

七、 使用ADB調(diào)試 Intent

1. 語法

adb shell am start -a <ACTION> -t <MIME_TYPE> -d <DATA> \
  -e <EXTRA_NAME> <EXTRA_VALUE> -n <ACTIVITY>

2.舉例

adb shell am start -a android.intent.action.DIAL \
  -d tel:555-5555 -n org.example.MyApp/.MyActivity

至此,本篇已結(jié)束。轉(zhuǎn)載網(wǎng)絡(luò)的文章,小編覺得很優(yōu)秀,歡迎點擊閱讀原文,支持原創(chuàng)作者,如有侵權(quán),懇請聯(lián)系小編刪除,歡迎您的建議與指正。同時期待您的關(guān)注,感謝您的閱讀,謝謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容