Pull to refresh

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

Reading time 4 min
Views 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, так что теоретически один провайдер может получить доступ к настройкам другого. Ещё не знаю как это исправить.
Tags:
Hubs:
+20
Comments 18
Comments Comments 18

Articles