2013-07-16 3 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); 

Это способ, которым я хотел бы сделать это вместо того, чтобы:

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

Смежные вопросы