Year2016

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

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

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

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

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

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

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

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

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

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

Continue reading

Как подделать запрос с использованием CSRF токена для Instagram

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

С одной стороны, все логично и может быть легко объяснено. Это просто способ защиты соцсети от массовых накруток аккаунтов, от автоматизации процессов постинга и проч. Принимая это во внимание, можно предположить, что Instagram позиционирует себя как социальная сеть, все виды взаимодействия с которой могут быть произведены только вручную. К сожалению, это ограничивает многих, ведь помимо «незаконных» действий с инстаграмом можно было бы разрабатывать альтернативные клиенты для этой соцсети, ведь давно уже не секрет, что официальный (и единственный) клиент обладает рядом дико раздражающих минусов (плохо реализованный Material Design, например, или отсутствие ландшафтной ориентации на Android, или полное отсутствие версии для iPad и проч.).

Но, оставим позади все эти причины и поговорим о том, как эти ограничения можно обойти.

Continue reading

Тормоза на Nexus 7 на Cyanogenmod

Столкнулся с крайне неприятной ситуацией — старичок Nexus 7 2013, на который накатил Cyanogenmod 13 через неделю стал неистово тормозить. Причем это проявлялось вообще во всем — неважно какое приложение открывалось, что хранится в списке последних приложений — результат всегда был один — гарантированный тормоз.

Тормоза бывают разные. Есть те, с которыми скрипя душой можно жить. А есть те, которые заставляют открыть яндекс.маркет и Aliexpress с целью поиска чего-то нового. Увы, достойных альтернатив этому планшету я все еще не вижу, поэтому решил разобраться с ситуацией не так радикально.

Continue reading

Качество фото в Instagram

Я не поленился заморочиться и посмотреть какие размеры у фотографий в инстаграме есть сейчас, и какие использовались раньше.

Получить данные по посту не составляет никаких сложностей, если что, для чистоты эксперимента можете попробовать сами: все что нужно — это Firefox, Firebug, сервисы для симпатичного отображения json и немного вашего времени. Итак, поехали.

Для иллюстрации текущей картины я взял одну из своих последних фото в инстаграме.

Continue reading

Periodic JobScheduler в Android Nougat

Буквально в одну строку — начиная с Nougat нужно пересмотреть использование периодических задач с использованием JobScheduler и вот почему: минимальное время повторения составляет 15 минут!

То есть если у вас есть необходимость в фоновом вызове некоторого кода чаще (например, для обновления UI виджете), придется отказаться от вызова setPeriodic.

Таким образом в моем рабочем проекте уже 3 (ТРИ!) имплементации для фоновых повторяющихся задач — для старых версий Android, от Lollipop до Android M, и дальше.

Связано это с оптимизацией работы батареи, правда на спинах разработчиков.

 

Кратко: Nexus 7, Nougat и Google Apps

Решил наконец накатить Nougat на мой (по меркам Google — уже старенький) Nexus 7 2013. Только и единственно на Cyanogenmod 14.1, который как раз вышел (и как раз сегодня выкатил ночное обновление).

Установил. Нет Google сервисов с приложениями. Пытаюсь накатить GApps разных сборок — от Stock до нано-пиков и ничего. В ответ лишь получаю бесявую ошибку 70, которая означает, что в системном разделе не хватает места (stock весит 500 c лишним мегабайт, самая мелкая — pico — чуть больше сотки).

Решил копнуть в сторону recovery. Поставить TWRP через fastboot / adb у меня не получилось. Получилось однако через установку apk (впервые столкнулся с таким способом, раньше все в терминале прокатывало. Перезагрузился в Recovery, начал через adb sideload накатывать gapps, и вдруг получаю ошибку, в которой говорится, что я пытаюсь установить gapps версии 7.1, а у меня установлен Android 6.0.

Во дела…

Скачал gapps для Marshmallow, установил их, хочу перезагрузиться и вижу сообщение. Очередное. На этот раз меня уведомляют, что у меня не установлена система вообще никакая, и готов ли я к этому при перезагрузке.

Удивлен. Перезагрузил. Дальше белых букв, которые складываются в слово Google я ничего не увидел. Ладно, снова открываю TWRP и снова накатываю прошивку Nougat. Потом без проблем устанавливаются gapps и вуаля — немного танцев с бубном всегда выручают.

Теперь у меня есть Nexus 7 2013 с установленной нугой и рабочими (кажется) Google apps.

Добавить символ в конец EditText (как вариант)

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

Итак (как в школьных задачах по геометрии), дано — есть EditText, в который будут добавляться только проценты (в виде чисел, естественно). Чтобы сделать интерфейс чуть более понятным для пользователя, нужно добавить знак процента в конец поля. Можно немного погородить огород с помощью OnTextChangeListener, но я против такого подхода, нужно мыслить более системно.

Continue reading

How to share story on Facebook on Android

Привет всем!

Facebook  прекращает поддержку Graph API v2.1 30 октября 2016 года, а это значит, что некоторые проекты, которые работают на этих механизмах, требуется переписать.

Несмотря на то, что лично я часто ругаю Facebook за крайне запутанный способ ведения документации (и вообще все, там абсолютно все запутано!), он предоставляет довольный мощный инструмент для всего, который порой, правда выглядит как наведения пушки на воробья.

В одном из проектов мне пришлось переписать полностью класс по работе с Facebook — начиная от авторизации (как мы помним, класс по работе с сессиями Session канул в лету), заканчивая шарингом историй. И если с первым пунктом никаких проблем особенно не возникло (достаточно просто следовать документации и у вас все получится), то со вторым пришлось немного повозиться.

Continue reading

Fitness Challenge. История создания очередного приложения для фитнеса

Начало

Однажды я задумался о плюсах и минусах работы на долгоиграющих проектах. Один из таких проектов (клиент для Reddit) у меня длится уже пятый год, и довольно успешно: есть готовые наработки, есть большая аудитория, фидбеки от которых приходят довольно активно, так что считай большая база тестировщиков у тебя имеется и помимо штатных тестировщиков. При всем этом фронт работ уже не так высок, как раньше — новых фич добавляется немного, все баги уже лечены перелечены… и вот тут приходит время перейти к разговору о минусах.

А главным минусом я вдруг посчитал тот факт, что постоянно появляется в разработке так много интересного, что хотелось бы не только пощупать, но и куда-нибудь внедрить, а у тебя — тот самый проект, куда вклинивать что-то новое немного страшновато (все же помнят лозунг “Не трогай то, что работает”?), да и не очень нужно (менеджеры как правило не большие любители выделять время разработчиков под такие нужды). Но, минус на минус всегда дает плюс, так что я выгадал время, почитал что самое трендовое и вкусное на Android Weekly и сел писать план. Что я хочу изучить, ну или как-то так, название плану я не придумал, если честно.

Continue reading