Как стать автором
Обновить

Быстрое создание информационного виджета на JavaScript

Время на прочтение4 мин
Количество просмотров5.9K
Современные мобильные телефоны имеют большие экраны. Совершенно естественно желание использовать часть места для отображения какой-нибудь важной актуальной информации. Андроид даже имеет специальную сущность для этого, которая называется AppWidget (виджет). С помощью виджетов прямо на рабочем столе телефона или планшета кроме иконок приложений можно отображать прогноз погоды, баланс счета телефона, ближайшие события, избранные контакты — да почти что угодно, поскольку данные для виджетов предоставляются приложениями.

Мне очень нравится эта возможность Андроида (кстати, интересно, а на других платформах есть что-нибудь подобное?). Я ею пользуюсь с самого начала. Вот только есть некоторая категория программ, предоставляющих виджеты, в которой мне всё время чего-то нее хватало. Я сейчас имею в виду программы, отображающие на экране актуальный баланс телефона. Таких программ много. Для получения текущего баланса некоторые делают USSD или SMS запрос, а другие используют автоматизированную сервисную службу для управления абонентом своим тарифом через интернет, такие как ИССА у МТС или сервис гид у Мегафон. Мне больше нравится вторая разновидность, потому что через интернет службу можно получить информацию по нескольким разным телефонам, а по смс или USSD только по телефону, с которого осуществляется запрос. Ну а для планшетов без телефонии первый способ вообще закрыт.

В общем, перепробовал я множество таких программ, некоторые были лучше, чем другие, но показывали они не всегда то, что мне хотелось (до последнего времени я пользовался balance by). Например, мне хотелось видеть, сколько трафика осталось на моем телефоне, сколько на модеме. Это же так просто — вот она эта информация, на сайте же! Если берется информация о балансе оттуда, то почему не взять информацию о трафике? Если бы можно было бы для этого написать только регулярное выражение, я бы давно сделал это. Но приходилось только ждать обновления программы. А обновления выходили, обновлялась куча других операторов, но нужного мне индикатора трафика не появилось. Кроме того, так и не нашел программу, которая бы сохраняла динамику изменения баланса, чтобы можно было оперативно посмотреть, в какой момент вдруг начали списываться лишние деньги. А с мт тарификацией такое вполне может случиться.

Далее моё решение проблемы...

Поскольку мне хотелось исследовать Андроид, я решил написать свою такую программу. Но сразу избавиться от основного, на мой взгляд, недостатка существующих программ. Весь набор поддерживаемых сотовых операторов и других учетных записей, баланс в которых надо смотреть, должен быть вынесен из программы в подключаемые модули. И модули эти должны быть написаны не на сложной Java, а на простом JavaScript. Уже в процессе разработки я осознал, что это открывает более широкие возможности. Можно совершенно не ограничиваться сотовыми операторами и интернет провайдерами. Можно выводить на экран практически любую информацию, которая представляется в численном или текстовом виде. Например, очень просто делаются курсы валют и отслеживание почтовых отправлений EMS.

Программу я назвал AnyBalance. А плагины к ней AnyBalance провайдерами. Я хотел бы, чтобы AnyBalance провайдеры были open source, чтобы те, кого не устраивает функционал какого-нибудь провайдера, могли легко его дополнить. Ну или попросить об этом друга, знающего Javascript. Для этой цели я создал проект на Google code, и разместил там документацию и примеры. Призываю хабрасообщество взглянуть и оценить мой труд. И по возможности добавить в него своего оператора :) Когда будет написано побольше AnyBalance провайдеров, в AnyBalance появится возможность искать и добавлять провайдеры прямо из репозитория. Сама программа доступна из Андроид Маркета. В ней есть несколько работающих провайдеров, таких как Мегафон Москва, Курсы валют, отслеживание EMS отправлений и пара провайдеров для получения баланса игровой валюты из игр. Исходники всех провайдеров в репозитории.

Очень много информации о том, как делаются провайдеры, написано на странице проекта на google code. Я здесь вкратце расскажу.

Каждый провайдер декларирует набор счетчиков, которые он представляет, а также содержит Javascript, который эти счетчики получает. При обновлении виджета AnyBalance создает WebView, в котором запускается функция main провайдера. Результаты (значения счетчиков) сохраняются AnyBalance для показа на виджетах, построения графиков и статистики. Собственно, сам провайдер чрезвычайно прост. Его функция сводится только к получению актуальных значений счетчиков.

Чрезвычайно простой классический пример — Hello world.

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

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



В настоящее время я полностью перешел на AnyBalance. Надеюсь, она придется про вкусу и вам, и поможет кроме отображения баланса решить давно назревшую проблему по отображению, например, количества голда в вов или наличия определенного товара в интернет прямо на экране телефона :) Буду также благодарен всем, кто добавит свои провайдеры в общий проект или доработает существующие.

Также волнует вопрос насчет безопасности, можно ли написать зловредные провайдеры :). Все настройки аккаунтов хранятся в SharedPreferences, так что теоретически один провайдер может получить доступ к настройкам другого. Ещё не знаю как это исправить.
Теги:
Хабы:
Всего голосов 28: ↑24 и ↓4+20
Комментарии18

Публикации

Истории

Работа

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
19 сентября
CDI Conf 2024
Москва
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
24 сентября
Astra DevConf 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн