Android 隱式調用詳解(Action)

要通過Action調用某個Activity代碼如下:

        //隱式調用代碼片段
        Intent intent=new Intent();
        intent.setAction("com.ex.wy");
        startActivity(intent);

*如果這個手機中都找不到這個Action就會報錯

xml中代碼
下面的
<category android:name="android.intent.category.DEFAULT" />
必須加上因爲在你 startActivity(intent);時系統已經默認加上這個category了
so,爲了你的Activity能夠隱試調用必須加

 <activity android:name=".IntentActivity">
            <intent-filter>
                <action android:name="com.ex.wy" />
                <action android:name="com.ex.wy2" />
                `
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

Action的匹配規則

<action android:name="com.ex.wy" />
<action android:name="com.ex.wy2" />

我這裏寫了兩個Action但是我的Intent中只是添加了一個Action
依然可以照常調用

但是如果我Intent中的Action有兩個而且我另一個Activity加上一個Action呢
程序會調用哪個?

Intent intent=new Intent();
        intent.setAction("com.ex.wy");
          intent.setAction("com.ex.wy3");
        startActivity(intent);
 <activity android:name=".IntentActivity2">
            <intent-filter>
                <action android:name="com.ex.wy" />

                `
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
 <activity android:name=".IntentActivity">
            <intent-filter>
                <action android:name="com.ex.wy" />
                <action android:name="com.ex.wy2" />
                `
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

實驗結果:程序只會調用一個最符合的(IntentActivity)

如果我Intent只有一個Action呢,但是兩個activity都有這個action
這種我們經常遇到,比如打開一個文件系統會讓你選擇用什麼程序打開
so,系統會讓你選擇

第三種情況

Intent intent=new Intent();
        intent.setAction("com.ex.wy");
          intent.setAction("com.ex.wy3");
        startActivity(intent);
 <activity android:name=".IntentActivity2">
            <intent-filter>
                <action android:name="com.ex.wy" />

                `
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
 <activity android:name=".IntentActivity">
            <intent-filter>

                <action android:name="com.ex.wy3" />
                `
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

這種很奇葩 這個Intent中的Action有兩個但是每個Activity只有一個符合
程序只會選擇最後面那個
intent.setAction("com.ex.wy3");

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章