Intents are resolved in IntentResolver.queryIntent. Resolution is attempted in several “cuts”:

public List<R> queryIntent(Intent intent, String resolvedType, boolean defaultOnly,
        int userId) {

    ...
    ArrayList<F> firstTypeCut = null;
    ArrayList<F> secondTypeCut = null;
    ArrayList<F> thirdTypeCut = null;
    ArrayList<F> schemeCut = null;
    ...