Привет. Примерно полгода назад я запилил Android приложение для скробблинга проигрываемой в разных плеерах музыки в last.fm.
Уже несколько месяцев у меня нет времени развивать этот проект, поэтому я решил открыть его исходники (репозиторий на гитхабе).
Я пишу этот пост на Хабр с небольшой надеждой на то, что здесь есть люди, которым было бы интересно развивать WAIL дальше, добавлять новые фичи, фиксить баги и просто участвовать в оупен-сорс проекте Android приложения :)
Кратко о last.fm: это сервис для любителей послушать музыку, главная фича которого заключается в том, что вы можете передавать инфомацию о треках, которые вы слушаете, а last.fm на основе этого будет предлагать вам других исполнителей, друзей, концерты исполнителей, которых вы слушаете (кстати офигенно, первый раз сходил на концерт именно по рекомендации last.fm).
Скриншоты для поддержания интереса
Кратко о возможностях WAIL:
- Перехват событий (броадкаст интентов) о проигрывании музыки из различных плееров и скробблинг этой информации в last.fm
- Обновление #nowplaying на last.fm
- Оффлайн работа (когда появится доступ к сети — WAIL отправит информацию в last.fm)
- Минималистичный UI в Holo стиле (хотя на Android L тоже неплохо смотрится)
- Возможность звуковых уведомлений о скробблинге трека или о пропуске трека (если по различным условиям трек игнорируется приложением)
- Список обработанных треков
- И еще по мелочи :)
Еще немного скриншотов:
Теперь про архитектуру приложения для тех, кому интересно будет покопаться внутри
- WAIL — What am I listening
- 1) Главная часть WAIL — BroadCastRecevierы, которые ловят интенты от музыкальных приложений
- 2) Вторая главная часть WAIL — WAILService, которому передают информацию о треках, он уже решает что с ними делать — скробблить, обновить #nowplaying и прочее
- 3) Внутренняя SQLite база данных, в частности TracksDBHelper, сюда WAIL записывает обработанные треки, соответственно, эта БД позволяет работать оффлайн. WAILService периодически проходится по этой информации и отправляет её в last.fm
- 4) Ну и собственно UI: Все построено на фрагментах, есть поддержка верстки для планшетов
Что в приоритете по фичам
- Поддержка RemoteControllerClient — это API для медиаплееров, гораздо лучше, чем обработка интентов т.к. на него есть хоть какой-то стандарт. Кстати, ваш экран блокировки использует именно этот API для отображения и управления проигрываемой музыкой. У меня есть кое-какие наработки по этому направлению, но все осложняется практически полным отсутствием документации от гугла по этой теме. Суть поддержки RemoteControllerClient в том, что WAIL автоматически сможет обрабатывать ВСЕ музыкальные плееры, которые используют этот API
- Вывод текущего обрабатываемого трека на главном экране — многие пользователи не понимают, обрабатывает ли сейчас WAIL какой-то трек или нет… В общем, фича нужная и полезная
- Вывод уведомлений о скробблинге, обновлении #nowplaying в статус бар
- Настройки для отключения скробблинга в зависимости от типа подключения к сети (мобильные сети/wifi)
- Можете свободно предлагать свои пожелания в issues на гитхабе
Кому может быть интересно покопаться в WAIL
- Опытным Android разработчикам, которые хотят показать свое мастерство в Open Source проекте :)
- Начинающим Android разработчикам, которым я предлагаю делать небольшие фиксы/фичи и потихонько осваивать Android development на реальной практике с выходом в Google Play к реальным пользователям
- Тем пользователям WAIL, которые по совместительству являются Android или Java разработчиками и хотят что-то изменить в приложении :)
Если вы решили помочь WAIL
1) Во-первых — большое спасибо, как от меня, так и от пользователей :)
2) Во-вторых, я написал небольшое wiki на тему стайлгайдов по коммитам, по git flow и стайлгайдам по исходникам и ресурсам проекта, пожалуйста, прочитайте его, оно коротенькое.
3) В-третьих — да, успешно смерженные пулл-реквесты от вас попадут в Google Play!
4) Я буду мейтенером проекта, периодически проверяя пулл-реквесты, буду помогать проекту как разработчик, когда будет время. Релизы в Google Play будут делаться по мере развития проекта, я бы хотел делать частые релизы, чтобы быстро получать фидбек от пользователей и выстраивать планы на следующие релизы
5) Если хотите начать с легкого — придумайте небольшое issue, например фикс иконки или перевод на понятный вам язык, заведите issue на гитхабе, потом сделайте пулл-реквест с фиксом/фичей и всё :)
Всем спасибо за внимание, надеюсь, WAIL будет развиваться и жить дальше :)
Ссылка на гитхаб WAIL Beta — Android last.fm scrobbler
P.S.
Если вы посмотрите гитхаб, вы увидите, что там очень мало коммитов. Это связанно с тем, что в приватном репозитории лежали ключи с паролями, которыми я подписываю приложения (фейл, согласен), я решил не доверять git filter-branch и bfg и просто создал новый репозиторий перенеся исходники и убрав приватные данные, около ~250 коммитов потеряно.
Кроме того, в приложении опубликованы ключи к last.fm api, да на гитхабе. Но блин, декомпилировать Android приложение и достать все эти данные совсем не сложно, да и усложнять разработку другим людям тем, что им придется регистрироваться на last.fm в разделе разработчиков, получать ключи я бы не хотел, пожалуйста, не используйте их для плохих намерений :)
Пост не в «Я пиарюсь» по причине того что: 1) Проект оупен-сорсный 2) Он абсолютно не коммерческий, сделан с душой для тех, кому приложение полезно 3) Если модераторы Хабра посчитают, что пост надо перенести в «Я пиарюсь» — ок
P.P.S
Естественно, код не идеальный… Сейчас я бы переписал половину, но в целом, архитектура гибкая и расширяемая :)
Готов ответить на вопросы в комментариях к статье.
Автор: Artem_zin