天天看點

Android關于隐式Intent

1.隐式intent啟動活動

活動在AndroidManifest.xml中注冊時,如果想要能響應隐式Intent,可以添加<intent-filter>來指明目前activity可以響應的action和category,data

<activity android:name=".SecondActivity" android:label="SecondActivity">
            <intent-filter>
                <action android:name="com.example.activitytest.ACTION_START" />
                <category android:name="android.intent.category.DEFAULT"/>
                <category android:name="com.example.activitytest.MY_CATEGORY" />
            </intent-filter>
        </activity>
           

上述代碼:<action>标簽指定這個activity可以響應ACTION_START這個action,

<category>指定activity響應MY_CATEGORY這個category,

一個activity中可以設定多個action、多個category、多個data進行組合,這樣可以與多個Intent比對(當一個Activity中有多個Intent進行比對的時候,建議使用多個intent-filter與Intent進行比對)

使用隐式Intent時,Intent中傳入action和category,交給系統去搜尋有沒有比對的action和category,當一個activity的action和category完全比對時,就能啟動這個activity。

btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(FirstActivity.this,"點選",Toast.LENGTH_SHORT).show();
//                Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
                //隐式
                Intent intent = new Intent("com.example.activitytest.ACTION_START");
                intent.addCategory("com.example.activitytest.MY_CATEGORY");
                //調用系統浏覽器浏覽網頁
//                Intent intent = new Intent(Intent.ACTION_VIEW);
//                intent.setData(Uri.parse("http://wwww.baidu.com"));
                startActivity(intent);
            }
        });
           
一個Intent中隻能指定一個action,可以有多個category多個data,有多個activity比對時,Android會全部列出,可以進行選擇。
           

2.隐式Intent中action、category屬性

action:用來指定activity可以完成哪些動作,系統中定義了很多常用的動作

ACTION_MAIN:Android Application的入口,将目前activity設定為主界面。 

ACTION_VIEW:系統根據不同的Data類型,通過已注冊的對應Application顯示資料。

ACTION_EDIT:系統根據不同的Data類型,通過已注冊的對應Application編輯示資料。 

ACTION_DIAL:打開系統預設的撥号程式,如果Data中設定了電話号碼,則自動在撥号程式中輸入此号碼。 

ACTION_CALL:直接呼叫Data中所帶的号碼。 

ACTION_ANSWER:接聽來電。 

ACTION_SEND:由使用者指定發送方式進行資料發送操作。

如果<intent-filter>中沒有指定action,則任何的Intent請求都不能和這條<intent-filter>比對;

如果Intent中沒有指定action,則隻要<intent-filter>中指定了action就能比對(其他條件也比對的情況下),即預設可以比對所有的action。

category:指定目前動作(Action)被執行的環境,即這個activity在哪個環境中才能被激活。當不屬于這個環境時,不能被激活。

CATEGORY_DEFAULT:預設的執行方式,所有Intent都可以激活它

CATEGORY_LAUNCHER:和ACTION_MAIN配合使用,用于設定主activity。   

CATEGORY_HOME:設定該元件為Home Activity。  

CATEGORY_BROWSABLE:設定該元件可以使用浏覽器啟動。

CATEGORY_GADGET:設定該元件可以内嵌到另外的Activity中。