2013-07-17 63 views
1

Android的文件說:沒有行動意圖過濾

http://developer.android.com/reference/android/content/IntentFilter.html

「行動相匹配,如果任何給定值的符合目的的行動,或者在過濾器中指定任何動作。」

我只是試圖測試它。在我的測試應用程序,我設定過濾器的活動之一:

<intent-filter> 
    <action android:name="ma" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <category android:name="mk1" /> 
</intent-filter> 

我嘗試發送這樣的意圖:

Intent i = new Intent(); 
i.setAction("ma"); 
i.addCategory("mk1"); 
startActivity(i); 

它的工作原理 - 我的活動得到啓動。

然後我註釋掉行動過濾器:

<intent-filter> 
    <!-- <action android:name="ma" /> --> 
    <category android:name="android.intent.category.DEFAULT" /> 
    <category android:name="mk1" /> 
</intent-filter> 

我再次發出同樣的目的。現在我的活動沒有開始。

爲什麼?根據文檔,當我的過濾器沒有指定動作時,意圖採取一些行動應該填寫它。

回答

1

參考動作試驗documentation on IntentFilters特別下面的描述中部分上意圖分辨率

如示例所示,當一個Intent對象名稱只是一個單一的 動作,過濾器可能會列出多個。該列表不能爲空;一個 過濾器必須包含至少一個元素,否則它將阻止所有意圖。

要通過此測試,意圖對象中指定的操作必須 匹配過濾器中列出的操作之一。如果對象或 過濾器不指定一個動作,結果如下:

  • 如果過濾器沒有列出任何動作,沒有任何的意圖匹配,所以所有的意圖測試失敗。沒有意向可以通過過濾器獲得 。

  • 另一方面,未指定動作的Intent對象會自動通過測試 - 只要過濾器包含至少一個動作爲 即可。

正是從這個很明顯,包含IntentFilter沒有動作不會匹配任何Intent對象。這是你所看到的。


在另一方面,我絕對同意你說的文檔不一致。即使我在這裏複製的部分是不一致的,因爲它指出「一個過濾器必須至少包含一個元素,或者它將阻止所有意圖」「未指定操作的Intent對象會自動通過測試 - 只要過濾器至少包含一個動作。「

0

你也應該在你的來源評論i.setAction("ma");

+0

那還是不行。 – 2017-08-06 18:02:59