- USSD в Android
- Запрос USSD — это что такое? USSD-запросы и коды
- Для чего нужны команды?
- Польза от комбинаций
- Популярные комбинации МТС
- Команды «Велком»
- Команды «МегаФон»
- Заключение
- Простой USSD-запрос в Android 4.0+
- Что такое USSD-команды и для чего они используются на телефоне
- Что это такое USSD-команды
- Назначение USSD-команд
- Форма запросов в виде USSD-команды
- Как работает USSD-команда
- Отключение USSD в телефоне
- Запросы в виде USSD-команд у разных операторов
USSD в Android
USSD (Unstructured Supplementary Service Data)— стандартный сервис в сетях GSM, позволяющий организовать интерактивное взаимодействие между абонентом сети и сервисным приложением в режиме передачи коротких сообщений.
Как известно, Android не имеет API для чтения USSD сообщений, далее я расскажу как решить эту проблему.
Как то столкнулся с задачей отослать команду и принять USSD сообщение. Оказывается USSD ответ сохраняется в буфере BufferedReader и существует сторонний класс USSD, для парсинга информации из этого буфера.
Сам класс можно скопировать тут
Теперь рассмотрим саму реализацию использования класса:
Для начала создадим интерфейс приложения, у нас будет AutoCompleteTextView, TextView, Button:
android:layout_width = «fill_parent»
android:id = «@+id/Text2»
android:layout_height = «wrap_content» >
>
android:text = «@string/send»
android:id = «@+id/button1»
android:layout_width = «fill_parent»
android:layout_height = «wrap_content» >
>
>
Вот такой интерфейс у нас должен получиться:
Теперь предадим жизни приложению, напишем сам код получения результата USSD.
// не пишу все импорты, напишу только то, что не забудьте подключить класс USSD
import com.example.android.UssdMessage.USSD ;
public class UssdmessageActivity extends Activity implements OnClickListener <
/** Called when the activity is first created. */
private TextView view ;
private AutoCompleteTextView number ;
Override
public void onCreate ( Bundle savedInstanceState ) <
super . onCreate ( savedInstanceState ) ;
setContentView ( R. layout . main ) ;
Button button = ( Button ) findViewById ( R. id . button1 ) ;
button. setOnClickListener ( this ) ;
this . view = ( TextView ) findViewById ( R. id . Text2 ) ;
this . number = ( AutoCompleteTextView ) findViewById ( R. id . Text1 ) ;
>
Override
public void onClick ( View arg0 ) <
String encodedHash = Uri. encode ( «#» ) ;
call ( « * » + number. getText ( ) + encodedHash ) ;
this . view . setText ( «» ) ;
>
protected void call ( String phoneNumber ) <
try <
startActivityForResult (
new Intent ( «android. intent . action . CALL », Uri. parse ( «tel : »
+ phoneNumber ) ) , 1 ) ;
> catch ( Exception eExcept ) <
this . view . append ( «nn » + «n« + eExcept. toString ( ) ) ;
>
>
Override
protected void onActivityResult ( int requestCode, int resultCode, Intent data ) <
USSD ussd = new USSD ( 4000 , 4000 ) ; // передается два параметра, задержка до и после (ms) создания сообщения
if ( ussd. IsFound ( ) )
this . view . append ( «n« + ussd. getMsg ( ) ) ;
else
this . view . append ( «» + R. string . error_ussd_msg ) ;
>
Так же не забудьте добавить следующие разрешения (иначе не заработает):
Скриншот работы приложения:
Добавлю то, что класс написан так, что выводит в logcat отладочную информацию.
На мой взгляд не сложный и удобный класс, который может помочь в решении Ваших задач.
Спасибо за внимание.
Источник
Запрос USSD — это что такое? USSD-запросы и коды
Все современные люди пользуются услугами мобильной связи от разных операторов, а у каждого мобильного оператора есть перечень комбинаций, с помощью которых можно подключить те или иные услуги – это запрос USSD. Если вкратце, то подобные запросы содержат в себе цифры и символы, после ввода и отправки которых будет сделано какое-то действие. Каждый отвечает за отдельную функцию, и в данной статье будет представлено все о подобных комбинациях.
Для чего нужны команды?
Запрос USSD – это своего рода опция для клиентов мобильной связи, которая устанавливается вместе с SMS и является базовой услугой любого оператора. В переводе данная аббревиатура означает «дополнительная опция, которая не имеет структуры».
Для наглядного примера стоит разобраться, как работает подобная комбинация:
- Клиент мобильной связи, например, желает проверить баланс мобильного телефона с использованием сервисного кода.
- На клавиатуре телефона сначала нажимается «*», а потом вводится нужное число, код которого отвечает за проверку баланса.
- После цифр вводится «#» и осуществляется звонок для отправки данных в сеть.
- Через несколько секунд сведения о балансе поступают на телефон в виде SMS или как интерактивное меню на экране гаджета.
Кроме того, запрос USSD может не только позволить проверить состояние счета. С его помощью можно включить или отключить услуги, сделать переход на другой тариф, открыть меню оператора для получения информации по мобильной связи, а также провести массу других операций.
Польза от комбинаций
Запрос USSD очень удобно использовать, ведь с вводом коротких команд можно добиться быстрого получения информации, при этом нет необходимости звонить оператору или отправлять SMS. Кроме того, с использованием комбинаций можно получить интересующие данные в любое удобное время, на протяжении 24 часов в сутки.
С использованием таких кодов можно контролировать свой мобильный телефон, номер. Клиенты сети могут отправлять запросы другим людям, чтобы те переслали деньги или просто перезвонили.
Для более детального рассмотрения комбинаций следует указать данные по разным операторам России.
Популярные комбинации МТС
Самая первая и популярная команда от МТС — это *111#. Такая команда служит для открытия портала, в котором каждый пользователь сможет управлять тарифом и опциями. Если сложно запоминать другие команды, то нужно запомнить только эту. С ее помощью можно будет узнать все, что потребуется, и даже мобильный баланс. Запрос заменяет персональный кабинет на сайте и может использоваться в любом регионе и даже стране. USSD-запросы МТС не тарифицируются, что очень удобно.
Если на телефоне в сообщениях и прочих частях документов есть символы, которые невозможно прочесть, то нужно ввести *111*6*1#. Ниже будут представлены самые популярные коды от оператора МТС России:
- Проверка счета проводится через набор комбинации *100#.
- Посмотреть, за что были сняты средства на протяжении 5 последних действий, можно по команде *145#.
- Быстро узнать номер мобильного можно по коду *111*10#.
- Для проверки активных платных опций используется *111*11#.
- Для проверки действующего тарифа применяется *111*12#.
- Узнать об остатке пакетных предложений можно по вводу *217#.
- Произвести пополнение баланса, используя для этого карту банка, можно через запрос *115#.
Это лишь малое количество запросов, которые есть у оператора. Детально со всеми можно ознакомиться на сайте, а в данной статье описаны только самые распространенные и необходимые. Информация по запросам на тарифные планы будет предоставлена в описании к самому тарифу, который выбран абонентом.
Команды «Велком»
Через USSD-запрос от «Велком» абоненты могут управлять мобильной связью самостоятельно. Таким образом, для проверки сведений по балансу нужно набрать на клавиатуре телефона *100#. Если пользователю нужно поменять систему оплаты, то используется код *145#. Это основные коды для управления своими деньгами.
Еще можно управлять тарифами. Для активации того или иного тарифного плана служит своя команда. Теперь предлагаем ознакомиться с другими методами управления планом. Для проверки активного тарифа нужно набрать *141*2*1#, а чтобы узнать мобильный номер, набирается *147#. В некоторых случаях в ответ на запрос будет приходить SMS, а в некоторых данные выводятся сразу на экран.
Для получения сведений о мобильном интернете и других опциях используется комбинация *135#. После ввода будет открыто меню, в котором можно выбрать разные услуги и ознакомиться с ними, а также при необходимости совершить их активацию. Есть еще одно меню, что позволяет открыть справки и команды для других запросов, для этого пользователям нужно набрать комбинацию *141#. Как видно, USSD-запросы «Велком» очень похожи на команды МТС и работают аналогично.
Команды «МегаФон»
У оператора «МегаФон» тоже большой перечень комбинаций, с которыми абонентам следует ознакомиться. Увидеть все возможные коды можно на официальной странице, а ниже будут описаны только самые востребованные у пользователей:
- Для вызова меню, которое по функциональности может заменить личный кабинет, вводится *105#.
- Узнать информацию по счету можно через код *100#.
- Посмотреть свой номер получится через запрос *205#.
- Остатки пакетных предложений узнаются через комбинацию *558#.
- Для детализации сведений об используемом тарифе вводится *105*3#.
- Информация о бонусном балансе предоставляется по коду *115#.
- Очень удобно использовать сервис «Перезвони мне» если прописать на клавиатуре *144*номер мобильного телефона клиента#.
- Для пополнения баланса другому пользователю «МегаФон» применяется комбинация *143*номер#.
- Использовать сервис «Обещанный платеж» получится по вводу *106#.
Это самые распространенные USSD-запросы «МегаФон», которые применяются чаще всего.
Рано или поздно комбинации пригодятся каждому абоненту мобильной связи, поэтому лучше изучить самые главные из них, чтобы в нужный момент их можно было применить. Все команды от «МегаФон» полностью бесплатные, а клиенты могут использовать их в работе в любое удобное для себя время.
Заключение
Как видно, запросов очень много, и все они отвечают за отдельные услуги. Важно после ввода той или иной комбинации не забывать совершать звонок для отправки команды, в противном случае нужная информация не будет предоставлена.
Источник
Простой USSD-запрос в Android 4.0+
В Android до сих пор нет API для USSD-запросов. Баг висит уже 6 лет!
Я находил разные способы создания и получения информации из USSD запросов, но в итоге ни один не устроил.
Затем я нашел упоминания о том, что с помощью обновленных в Android 4.0 служб спец. возможностей можно легко получать содержимое окон и так получить текст из окна и результатом USSD запроса. Попробовал — получается отлично! Без перезагрузок и надежно.
Отправка запроса
Для начала, надо отослать сам USSD-запрос. Это достаточно просто:
Для получения разрешение на работу с телефоном, надо получить разрешение, для этого прописываем в Android.Manifest.xml:
OK, из программы запрос отправляется, теперь придется потрудиться, чтобы получить его текст.
Accessibility service
Для работы со спец. возможностями надо экспортировать наш сервис. Для этого добавляем в Android.Manifest.xml:
Вместо USSDService напишите название вашего класса.
Сам класс я брал почти без изменений отсюда.
Для того, чтобы не получать лишнего, меняем метод onServiceConnected:
Еще нужен будет дополнительный фильтр в методе onAccessibilityEvent:
Метод performGlobalAction(GLOBAL_ACTION_BACK) требует Android 4.1+, если его не использовать, можно уложиться в 4.0. Он закрывает окошко сразу же после появления AlertDialog, поэтому окно не останется висеть.
Для простоты я уже добавил метод sendBroadcast, чтобы отослать полученное сообщение дальше.
Чтобы получить сообщение, добавляем в нужный класс такие методы:
showText — ваша процедура, которая что-то делает с полученным текcтом.
Для работы BroadcastReceiver’а надо добавить немного кода в onCreate() или подобный метод вашего класса:
И это — в onPause() или подобный:
Вот и все! Как видите, просто и надежно.
Подводные камни
Могут быть проблемы с работой в фоне: например, если экран заблокирован, то AccessibilityService вообще не будет работать — надо будить устройство. В разблокированном же состоянии запрос всегда будет вылазить на первый план, что то же не удобно.
AccessibilityService будет слушать постоянно, даже когда пользователь сам набирает USSD код или, еще хуже, если com.android.phone кидает AlertDialog. Так что надо либо усиливать фильтры (например парсить только если в сообщении есть определенная последовательность), либо использовать флаг, чтобы обрабатывать события только если ваше приложение сделало USSD-запрос.
И не забудьте в настройках спец. возможностей активировать ваше приложение, кстати для этого тоже неплохо было бы добавить проверку %)
Источник
Что такое USSD-команды и для чего они используются на телефоне
Каждый современный пользователь мобильной связи, независимо от оператора, предоставляющего услуги, использует различные команды, позволяющие выполнить на мобильном девайсе то или иное действие. С помощью запросов, вводимых в строке на панели набора номера, можно, например, проверить свой тариф, узнать остаток на счёте или другую информацию, подключить определённую услугу и т. д. Многие ежедневно используют отдельные комбинации, включающие звёздочки и решётки, но не все осведомлены, что представляют собой USSD-команды и могут даже не догадываться, что постоянно применяют их. Рассмотрим, как работают запросы, что можно сделать с их помощью, а также приведём примеры для разных операторов связи.
Что это такое USSD-команды
USSD являет собой сервис, по умолчанию работающий в сетях GSM и обеспечивающий взаимодействие пользователя с сервисной службой в режиме отправки коротких сообщений в реальном времени.
Аббревиатура USSD расшифровывается как Unstructured Supplementary Service Data, что в переводе означает «неструктурированные дополнительные сервисные данные».
Такой способ обмена информацией отличается высокой скоростью, что обуславливает мгновенный отклик на запросы, в отличие от технологии SMS, также являющейся стандартом сотовой связи, но использующей промежуточную базу данных и в целом применяемой для обмена сообщениями абонентами друг с другом. Аналогичным сервисом является IVR (Interactive Voice Response), при этом в USSD голосовые соединения не применяются, задействуется только сигнализационный канал. Так, обмен информацией посредством протокола USSD будет наиболее оперативным.
Рассматривая, что такое USSD, следует отметить также, что опция работает на любом телефоне и является базовой независимо от оператора. Короткие сообщения начинаются с символа * и заканчиваются символом хэша #, при этом звёздочки могут быть дополнительно включены в комбинацию, длина запроса соответствует не более 182 символа, хотя обычно команда значительно короче и не превышает даже 20 знаков. При вводе абонентом определённой последовательности знаков, сформированных в виде USSD-команды, в GSM-сети создаётся сессия, в пределах которой и ведётся диалог между абонентом и оператором связи.
Назначение USSD-команд
Посредством запросов пользователь способен:
- Узнать о состоянии счёта, тарифе, подключённых услугах, просмотреть свой номер и т. д.
- Управлять балансом и расходами (совершать платежи, переводить средства другим абонентам и выполнять прочие финансовые операции).
- Управлять данными (подключение/отключение услуг, переход на другой тариф).
- Взаимодействовать с доступными на сервере сервисами, получать автоматические настройки интернета и многое другое.
Форма запросов в виде USSD-команды
К командам, отправляемым на сервер, оператора предъявляются определённые требования. Так, абонент должен вводить в поле панели набора номера последовательность символов, где в начале кода будет стоять *, а в конце #, после чего следует нажать кнопку вызова. Например, у многих операторов для проверки баланса используется USSD-запрос *100#, после ввода комбинации абоненту будет доступна эта информация на экране мобильного устройства. Кроме того, запрос может содержать отделяющие от основного кода посредством знака звёздочки префиксы, которые позволяют выбрать параметр в рамках отправляемой команды (например, *111*1#).
Все поддерживаемые коды зарегистрированы на сервере, поэтому если комбинация введена неверно, пользователь увидит уведомление о том, что код запроса неизвестен. Также, когда набор символов введён в некорректной форме, сервер сообщит об ошибке неправильной формы запроса.
У каждого мобильного оператора имеется собственный набор поддерживаемых кодов, которые могут быть использованы для определённых задач, при этом они могут совпадать с комбинациями других поставщиков услуг связи. Основные, часто используемые команды лучше запомнить. Те же из них, что требуются редко, можно узнать на сайте оператора, где размещён полный список поддерживаемых комбинаций.
Как работает USSD-команда
Принцип работы запросов прост. Как только пользователь ввёл команду в нужной форме (помним, что для правильной интерпретации комбинации символов сервером следует ввести управляющие символы * и #) и нажал кнопку вызова, телефон отправит сигнал на сервер, который распознает команду как запрос USSD. Происходит маршрутизация сигнала, и он передаётся по протоколам TCP/IP USSD-приложению, взаимодействующему с базой данных биллинговой системы. Получив информацию, приложение отправляет её в виде USSD-пакета на мобильное устройство пользователя, содержание отобразиться на экране в текстовом формате.
Так, взаимодействие клиента с серверным приложением может проходить по двум сценариям:
- Информация считывается из базы данных, абонент получает на телефон мгновенный ответ на свой запрос, на этом сессия завершается (например, абонент узнаёт номер своего мобильного, баланс, сведения о тарифе и т. д.).
- В базу данных вносятся изменения, сессия продолжается, пока не завершится абонентом (например, пользователь заходит в меню услуг, знакомится с информацией и перемещается по пунктам и подпунктам меню, нажимая цифры, соответствующие определённым действиям – на экране доступен пронумерованный список, с использованием которого и осуществляется навигация). Сессия может быть завершена по нажатию определённой цифры, соответствующей выходу (как правило, это 0) или выбору конечного действия, которое изменит информацию абонента в базе данных оператора.
Рассмотрим простой пример, как отправить USSD-запрос с мобильного телефона:
- Для проверки остатка на балансе мобильного номера с использованием сервисного кода нужно ввести соответствующую этому действию комбинацию (для каждого оператора сочетание цифр может отличаться).
- Открываем панель набора номера и вводим в поле символ *, затем соответствующую комбинацию цифр, отвечающую за проверку счёта (например, 100), после чего нажимаем значок хеша # и кнопку вызова.
- Спустя короткое время данные о балансе поступят на телефон в виде смс-сообщения или появятся на экране смартфона как интерактивное меню.
Отключение USSD в телефоне
Сервис, предлагающий возможность связываться с сервисным приложением оператора, по умолчанию поддерживается любыми мобильными устройствами со стандартом GSM, и подключать его или качать дополнительный софт не требуется. Функция относится к стандартным опциям сотовой связи и доступна на телефоне сразу же при активации сим-карты, а отключить USSD не получится. При желании пользователь может просто перестать пользоваться данной возможностью, например, выбрав живое общение с оператором или применяя функционал личных кабинетов или мобильного софта. Абонентская плата за использование сервиса USSD не взимается, поэтому можно даже не заморачиваться тем, как отключить USSD в телефоне.
Запросы в виде USSD-команд у разных операторов
Рассмотрим полезные USSD-запросы крупных операторов связи, наиболее часто применяемые пользователями. Для удобства данные представлены в таблице.
Номер абонента вводится в формате 9ХХХХХХХХХ (10 цифр).
USSD-запросы отправляются исключительно с применением GSM-соединения, для использования функции не требуются ни 3G, ни LTE, а обмен данными происходит мгновенно. Тарифы операторов связи могут меняться, добавляться новые услуги, что означает и появление новых команд для их подключения. Актуальный перечень USSD-команд всегда можно найти на официальном сайте мобильного оператора.
Источник