Page 2 of 11

Рабочий Retrofit: кешируем запросы и обрабатываем отсутствие соединения

Retrofit — отличная (хотя тут больше подходит слово “лучшая”) библиотека на Android для создания REST и не только запросов из приложения к ресурсам в интернете. Для расширения функционала используется такой компонент библиотеки как “перехватчик” (хотя лично я называю их как есть — interceptors). Ниже я хочу предложить вашему вниманию ряд интерсепторов, которые использую по умолчанию. Они отвечают за выполнение следующих целей

Continue reading

Android: логгирование и отправка результатов на почту

Привет.

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

Одно дело — разработка, LogCat в Android Studio (если вы из любителей пожестче — можно распечатку в консоли смотреть с помощью adb), и совсем другое — ломать голову над вопросом почему у вас все работает на всем парке тестовых устройств, а пользователь жалуется на абсолютно обратную ситуацию. Коммуникация между разработчиком и конечным пользователем — это хорошо, но совсем другое — видеть своими глазами картинку происходящего (помните, как в матрице — для кого-то это зеленые иероглифы, а для кого-то — женщина в красном?)

Continue reading

Ffmpeg — fade transition. Создание анимации из изображений

Оказывается Ffmpeg может помочь решить и эту проблему!

Проблема номер раз — в Android ffmpeg wrapper выпадает без описания ошибки при слишком большом времени обработки, черт его знает почему — на обычном компьютере эта же операция отрабатывает без ограничений.

Я нашел в интернете bash скрипт, который позволяет сделать анимацию из ваших рисунков, собранных в одной папке. Делюсь им с вами.

https://cloud.mail.ru/public/2BNy/HH7Hui6Ko

Сборка библиотеки FFmpeg для Android приложения

Есть не так много библиотек, которые позволяют добавить функционал ffmpeg в ваше Android приложение. А если говорить про отсутствие в проекте NDK, то количество вариантов практически стремится к нулю. Я давно уже познакомился с ffmpeg-android, которую собственно и использую в приложении Selfie Timelapse App, однако все чаще и чаще приходилось сталкиваться с проблемой практически нулевой поддержки разработчиков.

Так, к примеру, ковыряться с библиотекой пришлось впервые, когда понял, что размер проекта меня не устраивает (чуть меньше 30 мегабайт). Оказалось, что в aar файл зашит скомпилированный ffmpeg для архитектур ARM и x86. Так как последних довольно мало (по крайней мере устройства на этой архитектуре мне лично не встречались), то я решил удалить ее поддержку из проекта.

Размер готового файла при этом стал колебаться в районе 20 мегабайт.

После появилось желание обновиться до последней версии ffmpeg (в библиотеке зашита версия 3.0.1). Пришлось очень сильно гуглить, чтобы получить приемлемый результат.

Continue reading

Скриншоты приложения: хорошая новость, плохая новость и нейтрализующая

Не так давно открыл для себя сервис, с помощью которого можно достаточно быстро делать скриншоты для приложения (есть такая штука в Google Play и AppStore, если кто уж совсем не в курсе что здесь происходит) — https://theapplaunchpad.com/ Как мы недавно обсуждали это на AppTractor.ru, этот сервис не уникальный, но мне как-то сразу он понравился.

К плюсам я отнес:

Continue reading

Как сделать электронную книгу из блога на LiveInternet.ru

Используя Android, саму площадку и Calibre для OS X.

Давайте начнем с того, что LiveInternet.ru — это мертвая площадка.

По крайней мере на основе информации, которой я владею. Все что я вижу там — это древний устаревший интерфейс с кучей рекламы и непонятными перспективами. Возможно, я не прав, может, кто-то активно пользуется этой платформой, а про всякие Medium, Golos.io и даже ЖЖ думает — вот людям заняться нечем, напридумывали разного.

С другой стороны, когда-то liveinternet.ru был довольно активной блог-платформой, так что вполне возможно, что у кого-то там хранится архив наивных мыслей, которые — вот внезапность — вдруг захотелось перечитать на сон грядущий. Имея в наличии такой же набор инструментов, что и я, можно эту хотелку реализовать.

Continue reading

Нужен ли хромбук?

У меня давно чесались руки посмотреть на хромбук, и вот наконец у меня получилось его достать. Для начала, вкратце что такое хромбук и что он может предоставить пользователю.

Хромбук — это, как правило, небольшой ноутбук (в формате нетбука) с Chrome OS на борту. Нетрудно догадаться, да и в интернете обзоры начинаются именно с этого, что кроме браузере хром на этом устройстве ничего нет. В общем, представить себе что такое хромбук не так и сложно — надо всего лишь запустить этот браузер на своем компьютере — и все, готово (за небольшим исключением, но об этом ниже). Собственно, я об этом догадывался, но все равно рассчитывал на нечто большее.

Зря.

Continue reading

Возня с ImageMagick и FFMPEG

Итак, братцы-акробатцы, я немного поразгребал чудные вещи, которые предоставляет ImageMagick и ffmpeg (конкретно — для morph transition между кадрами) и получил следующие результаты.

Самое простое — это использовать оба этих инструмента вместе. ImageMagick отлично работает с раскадровкой, но в плане создания видеофайла меня настиг фейл. Так что связка такая — сначала в ImageMagick создаем gif’ку с анимацией, которую скармливаем ffmpeg для получения ролика.

К сожалению, внедрить это в приложение на Android это не представляется возможным — порта для imagemagick, который у меня получилось бы внедрить, я не нашел. Увы.

(Что самое обидное — ImageMagick идет в базе на iOS).

Оказалось, что можно хитро извернуться и решить вопрос с помощью одного ffmpeg. Тут есть два подводных камня, каждый из которых мы рассмотрим по отдельности.

Первый — это сама схема. Мы берем раскадровку, к каждому кадру применяем фильтр. В итоге команда для создания становится бесконечно безобразной.

Ну и второй камень — кажется, на параметр filter_complex существует ограничение на количество вводных данных (input). По крайней мере превысить количество рисунков более чем пять у меня не получилось (вылет с соответствующей ошибкой).

Вывод.

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

Спасибо.

Doze mode и система энергоэффективности аккумуляторов

Хотите, чтобы ваш телефон прожил дольше на одной зарядке? Просто не пользуйтесь им.

Начиная с Android M в наших телефонах появился особый режим энергосбережения — Doze mode. Если очень кратко попытаться объяснить что это, то это просто режим сна. Телефон в него уходит при выполнении главного условия — аппаратом не пользуются некоторое время. При этом гасятся все фоновые задачи приложений, обращения к сети и проч. При этом есть так называемые окна — периоды времени, через которое телефон “просыпается” для выполнения накопившихся задач. И чем дольше ваш телефон находится в этом режиме, тем реже эти окна пробуждения появляются.

В Android Nougat этот режим стал еще более прогрессивнее, сейчас аппарат может уходить в Doze режим даже если он не лежит неподвижно на вашем столе, а, например, прыгает в кармане ваших брюк.

Способ “разбудить” телефон теперь только один — посылать push уведомления с высоким приоритетом. Больше вариантов нет.

С одной стороны, это хорошее изменение в рабочий режим наших смартфонов. А с другой — это битва с заведомым финалом. Проигрышным. Как по мне, эта битва с ветряными мельницами будет продолжаться до тех пор, пока не придумают новые виды аккумуляторов, которые будут превосходить по энергоэффективности существующие (и при этом не взрываться по примеру Samsung’ов… Да и айфонов, если хорошенько пошерстить новостные ленты).

Как изменить таблицу в SQLite на Android

Каждый раз, когда изменяется структура базы данных в приложении, необходимо вызывать метод SQLiteOpenHelper.onUpgrade, в котором описывать сами изменения (добавление / удаление таблиц, полей или индексов). Естественно, эти же изменения необходимо указывать в обновленном запросе при создании базы в методе SQLiteOpenHelper.onCreate.

К примеру, сначала таблица mytable создавалась с помощью такого запроса

Затем в процессе разработки возникла необходимость в дополнительном поле category. Что мы должны сделать:

Continue reading