Открытие HTML из файловой системы в WebView

Предположим, что имеется ряд файлов HTML, ссылающихся друг на друга, в файловой системе или в assets приложения.

Надо убедиться, что имеется следующее:

webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
});

На первый взгляд, это абсолютно бесполезное добавление, но на самом деле, это гарантирует, что ссылка будет открыта именно в вашем WebView. Если у пользователя установлено какое-то приложение, которое подписано на URL типа file://*, то именно оно будет запущено, что, конечно, нежелательно.

Это интересный случай, когда приложения могут влиять друг на друга там, в то время как, казалось бы, влияния быть не должно.

Google Play Services

Это один большой антипаттерн.

Есть мнение, что Google Play Services, презентованная на Google I/O 2013, купирует фрагментацию на Android.

Позволю себе с этим не согласиться.

Во-первых, пользователи отказываются устанавливать на свои устройства приложение из Google Play с непонятным для них функционалом. Пользователи не живут в терминах «разделяемые библиотеки». Но поскольку Google их к этому принуждает, то они остаются очень недовольными.  В результате, отзывы к этому приложению ужасающие, детям до 40 лучше не читать.

Отзывы на GMS

 

Оценка пользователями этого приложения от «лучшего разработчика» — 3,3.

Рейтинг GMS

 

Непонятно решение Google предоставлять доступ к этому приложению через Google Play со всеми этими рейтингами и оценками.

Представьте, что вы пишете приложение, которое требует Google Play Services:

1) Пользователь без этой библиотеки устанавливает ваше приложение.

2) Пользователю предлагается скачать Google Play Services, для корректной работы приложения.

3) Он соглашается.

4) Открывается Google Play и

5) ???????

Перед глазами пользователя появляется это безобразие!

Не так важно, что пользователь подумает о Google и Android в этот момент, но то, что он подумает о вашем приложении, это ведь важно, не так ли?

Во-вторых, код Google Play Services закрыт. При этом приложение имеет все возможные разрешения. Очередное отступничество от идеалов со стороны корпорации. Как разработчик, я предпочту интегрироваться с библиотеками, в которых я не сомневаюсь, и точно знаю к каким данным они могут обращаться.

В заключении хочу сказать, что я пытался использовать Google Play Services для push-нотификаций, отображения диалога выбора аккаунта пользователя и для асинхронной загрузки картинок. Все эти задачи на самом деле можно выполнить и без Google Play Services, но у меня было впечатление что это — стандартизированный способ решения таких задач, работающий на любом устройстве, независимо от версии Android. Ведь в этом и заключается дефрагментация платформы. При этом мои впечатления о первых двух функциях — положительные, а вот затея с асинхронной подгрузкой картинок провалилась из-за бага разработчиков Google. Его конечно же скоро исправят, но осадок остался.

Таким образом, использование Google Play Services в проекте является антипаттерном, по крайней мере на этом этапе.

Вспомним Android Honeycomb, который была просто ублюдочной версией, ныне почившей в бозе, к счастью как разработчиков, так и пользователей. Исходные коды к ней тоже не были открыты, и была она очень кривой. Прямо как Google Play Services сейчас. Очевидно, Google хочет отлаживаться на третьих разработчиках и их пользователях. И потом, осознав свои ошибки, возможно, выпустит то, что будет по нраву людям. Но пока такой момент не наступил, поэтому с интеграцией Google Play Services в свои проекты по возможности лучше подождать.