суббота, 7 декабря 2013 г.

Костыль чтобы fbreader на андроиде мог открыть *fb2.zip

Если в менеджере файлов или дропбоксе кликнуть *fb2.zip, то открыть их в fbreader не получиться. Это в принципе нельзя починить красиво, а не красиво чинить, там не горят желанием. У куллреадера такой хак есть.

Посему мини костыль. После установки apk, при клике на *fb2.zip можно выбрать Fb2zipHack - оно просто укажет корректный mime тип и теперь можно выбрать уже fbreader, который откроет книгу.

О неработающем Intent Filter.


Фильтрация интентов немного мутная тема. Ибо документация к ним мутная. Лучшее, что можно сделать при необходимости использовать фильтр, это почитать код фильтра.

После прочтения кода(api 19) несколько выводов в дополнение к гугловской документации.

Если в указана схема content или file, то обязательно надо указать mimeType="*/*".

 <data android:mimeType="*/*" android:scheme="file" android:host="*" />

Если его не указать или указать пустой, то фильтр будет отрабатывать только на интентах с пустыми mime type, но обычно там что-то есть. Тут можно использовать и пустой хост android:host="" - для таких схем файлов он обычно приходит пустой.

Если фильтруем ссылки, то у них хост есть и это надо обработать.

Если используются кастомные схемы, то надо смотреть, что там может приходить... общее правило, если что-то не задано явно, а оно приходит, то фильтр не сработает.

Так как  mimeType проверяется после файловых путей, то задание менее общей маски производительность не улучшит. То есть задавать ее емеет смысл только если оно действительно для чего-то надо.

Обработка расширений файлов. В текущей реализации PatternMatcher она отработает в единичных граничных случаях. Ибо у PatternMatcher проблеммы. И решение, которое там приводят, либо отработает не всегда, либо будет отрабатывать ложно.