2013-07-16 209 views
1

根據Android文檔(http://developer.android.com/guide/components/intents-filters.html):「另一方面,沒有指定動作的Intent對象會自動通過測試 - 只要過濾器至少包含一個動作即可。 「 和「Intent對象中的每個類別都必須與過濾器中的類別相匹配,過濾器可以列出其他類別,但不能省略任何意圖中的類別。」解決方案沒有任何動作

我有一個意圖過濾器聲明如下:

<intent-filter> 
    <action android:name="my.custom.action" />     
    <category android:name="my.custom.category" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 

基於上述規則我希望這個過濾器的父活動與下面的代碼返回,但它不是:

List<ResolveInfo> list = getPackageManager().queryIntentActivities(
    new Intent().addCategory("my.custom.category"), 
    PackageManager.MATCH_DEFAULT_ONLY + PackageManager.GET_RESOLVED_FILTER); 

如果未指定任何操作,意向解析是否會返回帶有上述過濾器的活動?

謝謝!

回答

1

在你的例子中,主要問題是在PackageManager.MATCH_DEFAULT_ONLY + PackageManager.GET_RESOLVED_FILTER,你必須做|(「按位或」)來使它工作。我的意思是你必須寫這樣的東西像PackageManager.MATCH_DEFAULT_ONLY | PackageManager.GET_RESOLVED_FILTER

+0

見上面我的意見。任何其他想法? – user2577593

1

將兩個標誌與'+'符號一起添加很可能是問題所在。

​​

這是我會做它,而不是方式:

setFlags(PackageManager.MATCH_DEFAULT_ONLY| 
PackageManager.GET_RESOLVED_FILTER); 
+1

結果是一樣的。還(0x10000 + 0x40)==(0x10000 | 0x40)。 – user2577593

+0

檢查[源代碼](http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.3_r1/com/android/server/IntentResolver.java# IntentResolver.queryIntent%28android.content.Intent%2Cjava.lang.String%2Cboolean%29)似乎只包含類別的意圖不解析爲任何過濾器。在原帖中引用的Android文檔似乎是錯誤的。 – user2577593

相關問題