Сянката и високите низове в Uri пренасочват директно към браузъра в Android

Имам следния филтър за намерения:

        <intent-filter >
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />

            <data
                android:host="myghost.com"
                android:pathPattern=".*\.html"
                android:scheme="http" />
        </intent-filter>

В повечето случаи работи добре, но когато отворя връзки, съдържащи „сянка“ и „високо“, не се извиква инструментът за избор.

Някой знае ли други магически думи, които действат по същия начин>

Има ли възможност за деактивиране на подобно поведение?


person pixel    schedule 13.05.2014    source източник
comment
Опитахте ли да възпроизведете това на друго устройство?   -  person interlude    schedule 13.05.2014
comment
Можете да го възпроизвеждате на всяко устройство (Nexus, Samsung, Genymotion и др.)   -  person pixel    schedule 13.05.2014
comment
@interlude Успяхте ли да го възпроизведете?   -  person pixel    schedule 15.05.2014


Отговори (1)


Проблемът е свързан с екраниране на '.' символ.

Променете android:pathPattern=".*\.html" на android:pathPattern=".*\\.html"

'\' се използва като екраниращ знак, когато низът се чете от XML. Ще трябва да го екранирате двойно, т.е. литералът '.' ще бъде '\\.'

person Manish Mulimani    schedule 16.05.2014
comment
Но защо само shadow и high думи са засегнати? - person pixel; 19.05.2014
comment
Тъй като \. не е валидна екранираща последователност, може XML анализаторът да я премахне и моделът ще бъде .*html, което показва, съвпадение на произволен знак до първото срещане на буквата h. След това очаква буква t. В shadow следващият символ е a, а в high следващият знак е i, следователно съвпадението на шаблона е неуспешно. Имам подробен отговор за съвпадение на шаблон тук, което може да ви помогне. - person Manish Mulimani; 09.09.2014