Android How to create Intent Filter for custom file extension that does NOT make it part of a chooser for everything on the phone

前端 未结 4 1306
暗喜
暗喜 2020-12-03 03:57

I have seen numerous answers on here about creating an intent filter for a custom file extension, but none of them seem to be answering my question:

I have an intent

4条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-03 04:38

    I've been struggling with this quite a bit for a custom file extension, myself. After a lot of searching, I found this web page where the poster discovered that Android's patternMatcher class (which is used for the pathPattern matching in Intent-Filters) has unexpected behavior when your path contains the first character of your match pattern elsewhere in the path (like if you're trying to match "*.xyz", the patternMatcher class stops if there's an "x" earlier in your path). Here's what he found for a workaround, and worked for me, although it is a bit of a hack:

    PatternMatcher is used for pathPattern at IntentFilter But, PatternMatcher's algorithm is quite strange to me. Here is algorithm of Android PatternMatcher.

    If there is 'next character' of '.*' pattern in the middle of string, PatternMatcher stops loop at that point. (See PatternMatcher.java of Android framework.)

    Ex. string : "this is a my attachment" pattern : ".att.". Android PatternMatcher enter loop to match '.' pattern until meet the next character of pattern (at this example, 'a') So, '.' matching loop stops at index 8 - 'a' between 'is' and 'my'. Therefore result of this match returns 'false'.

    Quite strange, isn't it. To workaround this - actually reduce possibility - developer should use annoying stupid pathPattern.

    Ex. Goal : Matching uri path which includes 'message'.

    
    ...
    
    
    
    
    
    ...
    
    

    This is especially issued when matching with custom file extention.

提交回复
热议问题