J'ai deux applications qui dépendent l'une de l'autre et je veux maintenant mettre en œuvre un test pour savoir si toutes les intentions requises sont disponibles.PackageManager queryIntentActivities renvoie la liste vide malgré la correspondance
J'ai utilisé la mise en œuvre générale du blog Développeurs Android:
http://android-developers.blogspot.com/2009/01/can-i-use-this-intent.html
public static boolean isIntentAvailable(Context context, String action) {
final PackageManager packageManager = context.getPackageManager();
final Intent intent = new Intent(action);
intent.addFlags(Intent.FLAG_DEBUG_LOG_RESOLUTION); // ADDED BY ME
List<ResolveInfo> list =
packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
}
le manifeste pour la deuxième application (que je vérifie pour) contient l'activité suivante:
<activity android:name="MyPackageMyAction" android:exported="true" android:enabled="true">
<intent-filter android:label="License">
<action android:name="com.mypackage.action.myaction"/>
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
et je le vérifie avec
booléen disponible = isIntentAvailable (this, "com.mypackage.action.myaction");
La sortie du journal contient ceci:
VERBOSE/IntentResolver(59): Resolving type null scheme null of intent Intent { act=com.mypackage.action.myaction flg=0x8 }
VERBOSE/IntentResolver(59): Action list: [ActivityIntentInfo{440482c0 com.mypackage.action.myaction}]
VERBOSE/IntentResolver(59): Matching against filter ActivityIntentInfo{440482c0 com.mypackage.action.myaction}
VERBOSE/IntentResolver(59): Filter matched! match=0x108000
VERBOSE/IntentResolver(59): Final result list:
, je suppose normalement qui retourne isIntentAvailable vrai si la seconde application est installée. Toutefois, la liste renvoyée par queryIntentActivities est toujours vide.
Qu'est-ce que je fais mal?
Est-ce votre seule activité dans l'application? –
Oui, c'est la seule activité. – alibi