Разработка рабочего прототипа приложения, которое будет облегчать использование функции телефонии DTMF Callback на устройствах с Android

  • Вид работы:
    Дипломная (ВКР)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    443,13 Кб
  • Опубликовано:
    2017-02-08
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Разработка рабочего прототипа приложения, которое будет облегчать использование функции телефонии DTMF Callback на устройствах с Android

Введение


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

Благодаря тенденции к снижению цен на рынке, почти каждому гражданину России стал доступен свой личный мобильный телефон.

Множество операторов связи предоставляют услуги сотовой связи. Благодаря развитию интернет технологий получила популярность IP-телефония, которая имеет ряд плюсов перед обычной сотовой телефонией, например, защищённый от прослушиваний разговор или запись разговора на сервер, использование коротких номеров, связь без привлечения провайдеров.

Существует несколько способов связи сервера VoIP и мобильного телефона. Один из самых очевидных, это интернет соединение, за которое обычно нужно платить оператору сотовой связи, которому не особо выгодно делать интернет-связь для VoIP дешевле, чем собственные услуги по телефонии. Поэтому цены на тариф со стабильным интернетом, необходимым для звонков посредством IP телефонии, могут быть завышены.

Существует способ связи с VoIP сервером, который принято называть callback, когда серверу сообщается на какой номер нужно позвонить, и сервер перезванивает абоненту, соединяя с номером, на который абонент звонит. Номер этот можно передать с помощью сети интернет, SMS или тонального набора (DTMF).

Не всегда есть возможность отправить SMS или воспользоваться интернетом, особенно, если абонент находится в роуминге. Часто, единственный доступный способ связи - это «традиционный» вызов с помощью сотовой связи. Существует способ, через который можно обеспечить связь с сервером VoIP через сотовый вызов, для этого используется DTMF Callback по следующему алгоритму:

.        Абонент «A» звонит на номер сервера телефонии

Рисунок 1. Шаг 1

2.      Сервер телефонии обрывает связь

Рисунок 2. Шаг 2

3.      Сервер телефонии перезванивает абоненту «A» и ждёт ответа

Рисунок 3. Шаг 3

4.      Абонент «A» отвечает на звонок

Рисунок 4. Шаг 4

5.      В тональном наборе абонент «A» набирает номер абонента «B»

Рисунок 5. Шаг 5

6.      Сервер инициализирует звонок абоненту «B»

Рисунок 6. Шаг 6

7.      После инициализации сервер связывает соединение абонента «A» и абонента «B». Абонент «A» уже слышит гудки дозвона до абонента «B».

Рисунок 7. Шаг 7

Абонент «B» отвечает на звонок. Оба пользователи могут обмениваться голосовыми сообщениями.

Рисунок 8. Шаг 8

В итоге у абонента «A» и абонента «B» совершается входящий звонок, и они могут общаться друг с другом через сервер телефонии.

Существует способ Callthrough, который в отличие от Callback не требует перезвона сервера абоненту «A», но в связи с этим, абонент «A» платит за исходящий вызов.

Основание для разработки


Основной недостаток инициализации callback с помощью DTMF в том, что абоненту «A» надо вручную набирать номер абонента «B» после того как ему перезвонил сервер. В журнале вызовов на телефоне абонента «A» в исходящих звонках остаётся номер, который он набирал, то есть номер сервера, а во входящих и номер callback, который перезвонил ему. Данная информация для пользователя является малоинформативной. Сервер телефонии может быть настроен так, что абоненту «A» перезванивает callback с разных номеров. Это значит, что в журнале вызовов у пользователя будет большое количество незнакомых номеров. Данная информация является лишней, и её следует скрывать от абонента. Часто предоставляющие callback сервисы обходятся без прямого доступа по DTMF, а используют интернет подключение, SMS или специальную SIM-карту.

 

Цель разработки


Разработать рабочий прототип приложения, которое будет облегчать использование функции телефонии DTMF callback на устройствах с android.

Обзорно-аналитическая часть

 

Сотовая связь


Сотовая связь - беспроводная связь, зоны доступа которой разделены на шестиугольные ячейки похожие на соты. Одну такую зону доступа обеспечивает базовая станция. Множество таких базовых станций, которые составляют зоны из сот, называют сотовой сетью, устройства, которые пользуются сотовой сетью - сотовые телефоны. В сотовой сети, каждая ячейка использует различный набор частот от соседних клеток для избегания помех и чтобы обеспечить гарантированную пропускную способность для каждой ячейки.

Особенности сотовой сети:

·        Использование множества базовых станций даёт больше возможностей, чем использование одного большого передатчика. Каждой ячейке может быть присвоено несколько частот, соответствующих базовой станции. Группу частот можно использовать повторно, если соседние клетки используют другие частоты.

Рисунок 9. Схема повторного использования частот (F1-F4 - частоты)

·       
Мобильные устройства выделяют меньше энергии на связь с башней, так как требуется менее мощный сигнал, чтобы найти её вследствие более близкого расположения башни связи

·        Большую площадь покрытия, чем одного наземного передатчика, так дополнительные башни клеток могут быть добавлены на участки с плохой связью, куда сигнал плохо доходит из-за помех.

При расположении ячеек оптимально избегать перекрытия зон ячеек, между ячейками не должно быть пустого пространства. Поэтому геометрической формой покрытия могут быть такие фигуры, как треугольники, квадраты или шестиугольники. Форма покрытия от антенн больше всего похожа на шестиугольник [1].

Устройства, которые управляют сигналами и маршрутизируют их от одного сотового телефона к другому, называются автоматическими телефонными станциями (АТС). На данный момент почти все АТС являются электронными.

Номеронабиратель (dialer) - часть интерфейса телефонного аппарата, которая позволяет передать номер телефонного аппарата, с которым АТС должна соединить. Долгое время использовались импульсные dialer’ы, которые формировали импульсы, где каждой цифре соответствовало своё количество импульсов [2]. На телефонном аппарате находился диск с 10 дырками. Принцип соединения с АТС был таким:

На телефонном аппарате прокручивается диск от точки с указанной цифрой, который заводит пружину. Когда отпускается диск, пружина начинает разгибаться, диск начинает двигаться в обратную сторону. Набор импульса соответствует замыканию и размыканию телефонной линии. Между набором импульсов делаются паузы, чтобы отличить набор одного символа от другого. Данный способ набора достаточно неудобный, абоненту приходится несколько раз отводить диск и ждать пока он вернётся на место. Впоследствии появился импульсный кнопочный набор, который избавил от такого недостатка.

На данный момент для набора номера используется двухтональный многочастотный сигнал (Dual Tone Multi-Frequency, DTMF). DTMF может быть использован для внутренних команд телефонной сети. В DTMF передаваемая цифра кодируется сигналом полученным суммированием двух синусоидальных напряжений определенной частоты [3]. Используется две группы по четыре частоты звукового диапазона в каждой.

Таблица 1. Соответствие частот и символов при DTMF наборе

1

2

3

A

697 Гц

4

5

6

B

770 Гц

7

8

9

C

852 Гц

*

0

#

D

941 Гц

1209 Гц

1336 Гц

1477 Гц

1633 Гц



АТС может отвечать в формате DTMF, например такие сигналы как «занято», «готовность», «контроль посылки вызова». В отличии от импульсов, DTMF можно передавать по аудиоканалу.

Таблица 2. Ответы АТС в формате DTMF

Сигнал

Частоты

«занято»

480 Гц

620 Гц

«готовность»

350 Гц

440 Гц

ringback (US)

440 Гц

480 Гц

Inward System Access (DISA) - функция прямого доступа, возможность получения абонентом доступа к управлению телефонной станицей или сервером телефонии посредством DTMF сигналов с телефона.

 

Обзор рынка сотовой связи


Выручка компаний, предоставляющих сотовую связь в России, растёт, о чём свидетельствуют их отчёты [4] [5] Из тех же отчётов видно, что большая доля доходов приходится на мобильную связь. В интересах, как обычного частного пользователя, так и корпоративного игрока, является сокращение расходов на мобильную связь. Одним из способов является анализ используемых услуг за месяц и выбор наиболее подходящего тарифа у мобильного оператора.

Рынок мобильной связи в Москве состоит из трёх игроков, распределение которых можно увидеть на [6]:

Диаграмма 1: распределение крупных игроков на сотовом рынке

 

Сравнение местных тарифов по Москве


У трёх крупных игроков на московском рынке имеются схожие пакетные тарифы, которые можно сравнить. Например, тарифы класса «Smart» у МТС, «Всё включено» у Мегафона и «Всё за» у Билайн. Эти тарифы предлагают пакет опций и абонентскую плату за них. Сравним схожие по цене тарифы из этих классов. В пакеты услуг могут входить SMS, MMS, интернет и другие услуги, но в данном разборе они не учитываются, так как нас интересует именно цена звонка. По этой же причине нет подробного описания нюансов тарифов, если они прямо не влияют на цену, однако можно заметить, что качество связи в разных районах местности может сильно отличаться у операторов. Также нет нужды считать стоимость звонков, если превышен месячный лимит тарифа, так как человек, который контролирует расходы, будет выбирать себе тариф правильно, однако стоит отметить, что цена после превышения лимита может быть достаточна высокой. Стоит отметить, что входящие внутри России для всех трёх пакетных групп бесплатные.

Минимальными по цене являются пакетные тарифы «Smart mini» [7] - 200 ₽, «Всё включено XS» [8] - 199 ₽ и «Всё за 200» [9] - 200 ₽. Имеются некоторые особенности для звонков внутри сети оператора. В «Smart mini» и «Всё включено XS» звонки по всей России, а во «Всё за 200» только по Москве и Московской области. Цены указаны на момент 15.05.2015.

Таблица 3. Минимальные пакетные тарифы


МТС

Билайн

Мегафон

Цена тарифа, рублей в месяц

200

199

200

Звонки внутри сети. Москва и МО, бесплатные минуты

1000

Безлимит

300

Звонки внутри сети. Россия, бесплатные минуты




Звонки другим операторам. Москва и МО, рублей в минуту

1,5

1,6

2

Звонки другим операторам. Россия, рублей в минуту

10

9,9

10


Как видно из таблицы, тарифные опции весьма похожи. Дешевле всего обходятся звонки внутри сети. Абонентам других операторов звонить дороже, особенно за пределы Московской области.

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

Таблица 4. Минимальные пакетные тарифы(звонки за границу)


МТС

Билайн

Мегафон

СНГ, рублей в минуту

29

24

20

Европа, рублей в минуту

49

35

30

Остальные страны, рублей в минуту

70


60

США, рублей в минуту


35

30

Канада, рублей в минуту


35

30

Австралия и Океания, рублей в минуту



40

Азия, рублей в минуту



50

СНГ внутри сети, рублей в минуту


12


Северная и центральная Америка (без США и Канады), рублей в минуту


40



Как видно из таблицы, тарифы на звонки в другие страны уже отличаются достаточно сильно. Билайн предоставляет возможность по низкой цене звонить на номера Билайн в других странах. У Мегафона больше различий цен для разных стран, а у МТС наоборот единая цена для Европы и единая цена для всех остальных стран.

В следующей ценовой категории (малые пакетные тарифы) идут тарифы: «Smart» [10] - 450 ₽, «Всё включено S» - 390 ₽ [11] и «Всё за 400» [12] - 400 ₽.

Таблица 5. Малые пакетные тарифы


МТС

Билайн

Мегафон

Цена тарифа, рублей в месяц

450

400

390

Звонки внутри сети. Москва и МО, бесплатные минуты

Безлимит

Безлимит

Безлимит

Звонки внутри сети. Россия, бесплатные минуты



400

Звонки другим операторам. Москва и МО, бесплатные минуты

500

400


Звонки другим операторам. Россия, рублей в минуту

10

9,9

10

Как и в случае с минимальными пакетными тарифами, условия весьма схожи, но цена уже различается.

Цены на звонки в другие страны у МТС для пакетов типа «Smart» не отличаются, как и у Мегафон для пакетов «Всё включено», а вот у Билайн в пакетах «Всё за» цены на за границу немного отличаются:

·        В тарифе «Всё за 400»: условия «Всё за 200» + первые 10 минут в день стоят 5 ₽, если звонить в страны СНГ, Крым и Севастополь.

·        В тарифе «Всё за 600»: условия «Всё за 400» + первые 10 минут в день стоят 7 ₽, если звонить в Азербайджан, Беларусь и Молдову

·        В тарифе «Всё за 900»: условия «Всё за 600» + первые 10 минут в день стоят 5 ₽, если звонить в Европу, США и Молдову

·        В тарифе «Всё за 1500»: условия «Всё за 900» + в Мальдивы, Мадагаскар, Бурунди, КНДР, Папуа-Новая Гвинея, Сейшельские острова, Сомали, Токелау, Тунис одна минута стоит 55 ₽

В следующей ценовой категории (средние пакетные тарифы) идут тарифы: «Всё включено M» - 590 ₽ [13] и «Всё за 600» [14] - 400 ₽, у МТС в данной ценовой категории пакетного тарифа нет.

Таблица 6. Средние пакетные тарифы


Билайн

Мегафон

Цена тарифа, рублей в месяц

600

590

Звонки внутри сети. Москва и МО, бесплатные минуты

Безлимит

Безлимит

Звонки внутри сети. Россия, бесплатные минуты


600

Звонки другим операторам. Москва и МО, бесплатные минуты

600


Звонки другим операторам. Россия, рублей в минуту

9,9

3


При равных местных тарифах, цена на звонки другим операторам по России у Мегафон в 3,3 раза дешевле.

В следующей ценовой категории (пакетные тарифы выше среднего) идут тарифы: «Smart +» [15] - 900 ₽ и «Всё за 900» [16] - 900 ₽.

Таблица 7. Тарифные пакеты выше среднего


МТС

Билайн

Цена тарифа, рублей в месяц

900

900

Звонки внутри сети. Москва и МО, бесплатные минуты

Безлимит

Безлимит

Звонки внутри сети. Россия, бесплатные минуты



Звонки другим операторам. Москва и МО, бесплатные минуты

1100

1000

Звонки другим операторам. Россия, рублей в минуту

3

9,9


При равных местных тарифах, цена на звонки другим операторам по России у МТС в 3,3 раза дешевле.

В следующей ценовой категории (большие тарифные пакеты) идут тарифы: «Smart +» [17] - 1500 ₽, «Всё включено L» [18] - 1290 ₽ и «Всё за 1500» [19] - 1500 ₽.

Таблица 8. Большие тарифные пакеты


МТС

Билайн

Мегафон

Цена тарифа, рублей в месяц

1500

1500

1290

Звонки внутри сети. Москва и МО, бесплатные минуты

Безлимит

Безлимит

Безлимит

Звонки внутри сети. Россия, бесплатные минуты



1800

Звонки другим операторам. Москва и МО, бесплатные минуты

2000

2000


Звонки другим операторам. Россия, бесплатные минуты





Данные местные тарифы имеют почти одинаковые условия.

В последней категории (максимальный тарифный пакет) оказался только Мегафон со своим тарифом «Всё включено VIP» [20] - 2500 ₽. Данный тариф предлагает 5000 минут для всех звонков по России.

Вывод


Пакетные тарифы весьма выгодные, если использовать их для звонков внутри сети. У конкурирующих операторов цены держатся примерно на одном уровне. Для обычного абонента, который говорит по 20-60 минут в день такие тарифы подходят. Если человеку необходимо разговаривать больше 120 минут в день, то ему придётся брать более дорогие тарифные пакеты ценой от 1500 до 2500, что уже достаточно дорого.

Для международного роуминга существуют свои условия, которые отличаются друг от друга. Данный роуминг у всех трёх операторов дорогой, тридцатиминутный разговор может превысить стоимость пакета услуг. Если абоненту приходится звонить в другие страны, то стоит выбрать другой тариф.

 

Тарифы для звонков в другие страны


Тарифы на звонки в другие страны были условно разделены на три группы:

.        Тарифы для родственников и друзей туристов

.        Тарифы для мигрантов

.        Тарифы для бизнесменов

 

Тарифы для родственников и друзей туристов


Для сравнения по тарифам для родственников и друзей туристов взято пять популярных курортных направлений [21]::

.        Испания

.        Турция

.        Греция

.        Кипр

.        Италия

Звонки по таким направлениям рассматриваются только при вызовах на сотовый телефон, так как турист вряд ли будет всё путешествие сидеть около стационарного телефона.

У МТС имеется тарифная опция «Выгодные международные звонки» [22]. Абонентская плата в месяц составляет 50 ₽. Звонки по этим пяти направления будут стоить 10 рублей в минуту. Тарифная опция совместима с другими тарифами, например с «Smart».

У Билайн имеется тариф «Добро пожаловать» [23]. Стоимость перехода на данный тариф составляет 150 ₽, ежемесячной абонентской платы за тариф нет, зато есть ежедневная плата в 4,45 ₽ за входящие в тариф опции. Стоимость звонков в Турцию составляет 6 ₽ в минуту. К сожалению, информации по другим из пяти туристических стран нет. На странице тарифа по ссылке:

#"897058.files/image011.jpg">

Рисунок 10. Скриншот области со страницы тарифа Билайн «Добро пожаловать»

Эта гиперссылка ведёт на адрес:

#"897058.files/image012.jpg">

Рисунок 11. Интерфейс страницы «Роуминг, междугородная и международная связь»

«Роуминг в путешествиях по миру», «Роуминг в путешествиях по России» и «Звонки из дома в другие города и страны». Очевидно, что цены на звонки в другие страны должны быть по третьей гиперссылке. Страница по этой ссылке предоставляет интерфейс для запроса к серверу Билайн за информацией.

Рисунок 12. Скриншот со страницы «Звонки из дома в другие города и страны» после запроса «Кипр» при тарифе «Добро пожаловать»

Если проверить цену, например, на Кипр, то вместо цен на Кипр будут указаны общие условия тарифа. Отдельных условий для Кипра указанно не будет. В пункте «Звонки в остальные страны» указана гиперссылка под названием «Согласно тарифам на международную связь» с адресом:

#"897058.files/image014.jpg">

Рисунок 14. Скриншот prefixer’а

Для исходящих звонков программа действительно добавляет prefix и suffix, но вот для входящих, вопреки настроенным правилам, она ничего не добавляет. То есть её на практике невозможно использовать для DTMF Callback связи, но зато можно использовать для реализации Callback от МТС.

Существует способ набрать на клавиатуре определённый символ или группу символов. Чаще всего программы с таким функционалом используются для расширения функций клавиатуры или интерфейса управления Android. Чтобы абонент не вводил полностью весь номер по памяти, когда ему перезвонил сервер Callback, он может воспользоваться эмуляцией нажатия номера. В данном случае телефон пошлёт DTMF сигналы, будто бы пользователь их вводил сам. Существует достаточно большое количество программ с данным функционалом.

 

Gamekeyboard


Для тестирования такой возможности была использованная Gamekeyboard от компании Locnet [30]. Для использования программы нужны root права. Данная программа содержит макросы, в которые можно записать какие символы будут вводиться с каким промежутком. Можно настроить размер и положение на экране виртуальной кнопки, которая будет активировать макрос. С телефона создавать макрос для этой программы достаточно тяжело, поэтому область её применения ограничивается небольшим количеством любимых номеров. Данная программа поддерживает профили, поэтому теоретически можно разработать приложение, которое создаст макрос для набранного номера и свяжет с кнопкой. Данное решение позволит абоненту не хранить в памяти номер абонента и не набирать весь номер целиком. Однако дополнительные действия от пользователя всё равно требуются.

Root права - права на доступ ко всем функциям UNIX систем. Так как Android является UNIX-подобной операционной системой, в ней тоже предусмотрены root права, однако производители телефонов часто ограничивают доступ к ним. Производитель может программное усложнить получение root прав, сделать запрет на перепрошивку. Производитель может сам дать инструмент для получения root прав, но при отказе от гарантий пользователем, который получил root права. Несмотря на это, бывает, что единственный способ реализовать какой-то функционал - это иметь доступ root.

 

Вывод


Большинство решений для DTMF Callback завязано на использование конкретного оператора. При наличии программных средств, упрощающих использование DTMF Callback, нет комплексного решения, которое нацелено конкретно на решение данной задачи. Владельцам собственных серверов по предоставлению VoIP связи выгодно пользоваться DTMF способом.

Технологическая часть

 

Анализ средств разработки под Android


Основным языком для написания пользовательских приложений под Android является Java [31]. Интерфейс программирования (API) для работы с функциями Android подразумевает использование Java. Для создания приложений, написанных на Java под Android, используются Build Tools из Android Software Sevelopment Kit (SDK). Существует способ написания приложений на C/C++ для обеспечения более высокой скорости работы приложений [32]. Для этого используется Native Development Kit. Существует решение для разработки под C# под названием Xamarin [33], которое позволяет создавать кроссплатформенные приложения. Для разработки на Python под Android можно использовать одно из нескольких решений [34] указанных в таблице:

Таблица 18. Сравнение реализаций python под Android

Project

Native Python

GUI libraries

APK generation

Custom build

Python for Android

Да

Да

Да

Да

PGS4A

Да

Да

Да

Нет

Android scripting

Нет

Нет

Нет

Нет

Python on a chip

Нет

Нет

Нет

Нет


Фреймворк kivy позволяет создавать кроссплатформенные приложения. Его можно связать с python for Android. Тогда становится возможным написание кроссплатформенных приложений, которые будут запускаться на Android. Также существует способ использовать обёртку для вызова Java классов из Android API под названием PyJNIus [35].

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

 

Средства для разработки под Android - SDK Tools


Основной инструментарий для разработки под Android входит в пакет инструментов - SDK Tools. В этот пакет входят инструменты для работы с виртуальными устройствами. Android Virtual Device Manager (AVD) предназначены для работы и настройки эмуляторов. Для того чтобы создать эмулятор используется образ системы. Такие образы можно скачать в графическом или консольном интерфейсе программы Android SDK Manager. В интерфейсе Android SDK Manager для одной версии Android можно выбрать несколько образов, которые будут эмулировать разные устройства.

Рисунок 15. Скриншот графического интерфейса Android SDK Manager

Одним из важных инструментов является Android Debug Bridge (adb), программа, предназначенная для отладки устройств на Android. Adb запускается из командной строки и управляется через консольный интерфейс. Adb работает с разными подключёнными устройствами к компьютеру:

·        Устройства, подключённые по USB

·        Устройства, подключённые по Wifi

·        Эмулируемые устройства

Adb позволяет:

·        устанавливать или удалять приложения с устройства

·        работать с командной оболочкой устройства

·        работать с packet manager

·        запускать Intent

·        работать с LogCat

В SDK входит большой набор инструментов, которые так или иначе интегрированы в среды разработки, например Build Tools входят в Eclipse или Android Studio.

 

Среда интегрированной разработки Android Studio


На данный момент, официальной средой интегрированной разработки (IDE) для Android является Android Studio [36]. Данная IDE базируется на IntelliJ IDEA от JetBrains и включает в себя ряд функций:

·              Скрипты Gradle для сборки apk

·              Сборка вариантов и генерация множества apk

·              Шаблоны кода

·              Редактор слоёв (layouts)

·              подпись приложений

·              Встроенная поддержка Google Cloud Platform и возможность интеграции Google Cloud Messaging and App EngineStudio позволяет параллельно устанавливать собранные приложения на несколько устройств подключённых по adb.

Android Studio поддерживает работу с системами контроля версий.

Редактор исходного кода в Android Studio обладает рядом функций, которые упрощают разработку:

·              автозавершение слов

·              подсказка об ошибках в коде

·              подсветка синтаксиса java и xml файлов

·              автоматический импорт из библиотеки Android, если используется класс из неё

·              выделение серым цветом переменных, которые не были использованы

·              комментирование строк кода

·              прыжки по разным файлам проекта в поисках выделенного слова

Android Studio является мощным инструментом, который рекомендуется использовать при разработке под Android, поэтому было принято решение использовать её в разработке.

телефония callback android тестирование

Обзор языка программирования Python


Python является языком высокого уровня, который сочетает в себе несколько парадигм программирования, такие как:

·        Объектное ориентированное программирование. В python всё является объектами: строки, классы, числа и т.д. Если, допустим, взять число «1» и сложить с ним число «2»:

«1+2»,

то на самом деле будет вызван метод __add__ у объекта 1, который получит тип Integer, поэтому следующая запись даст такой же результат:

(1).__add__(2)

·        Динамическая типизация. Тип задаётся автоматически во время выполнения программы [37]. Плюсом данного вида типизации является лёгкость написания программ и быстрое освоение программистом данного метода. В python можно самому указать тип. С помощью функции «type» можно узнать тип объекта. С помощью функции «int» и «float» можно изменить тип. Так можно число 1 представить строкой со значением 1 или числом с плавающей запятой. Пример:

>>> a = 1

>>> b = str(1)

>>> c = float(1)

>>> a

>>> b

'1'

>>> c

.0

Если проверить тип переменных, то у «a» будет «int», у «b» будет «str», а у «c» будет «float»

>>> print type(a)

<type 'int'>

>>> print type(b)

<type 'str'>

>>> print type(c)

<type 'float'>

·        Строгая типизация. Python принято относить к строго типизированным объектным языкам.

·        Функциональное программирование. В python можно использовать рекурсии, ленивые вычисления и функции высших порядков

·        Императивное программирование. Python поддерживает процедурный метод программирования, в python можно использовать модули.

Python считается достаточно простым языком, он является самым популярным языком для изучения в колледжах США [38].

Код на python выполняется построчно, поэтому часто ошибку в коде можно заметить только после выполнения этой строчки. Программы, созданные с помощью python for android, запускаются достаточно долго.

Для запуска такого приложения, техническим средством должно быть устройство связи со следующими характеристиками:

·              На устройстве во внутренней памяти должно быть 10мб свободной памяти для установки приложения и хранения его данных.

Требования к внутренней памяти обусловлены тем, что установленное приложение будет в себе содержать python for android и kivy. Для работы python for android необходим OpenGL ES 2.0, который есть в Android, начиная с версии 2.2.

 

Обзор языка программирования Java


Java является объектно-ориентированным языком программирования. С помощью компилятора исходный код на Java превращается в байт код, который содержит в себе набор инструкция для Java машины. Такой подход даёт независимость от платформы. В случае разработки под Android Java машиной является Dalvik. Использование такой машины может сильно снижать производительность.

Концепция Java в плане объектной ориентации схожа с python: «В Java есть специальный суперкласс Object и все классы являются его подклассами. Поэтому ссылочная переменная класса Object может ссылаться на объект любого другого класса» [39].

Java имеет гибкую систему разграничения доступа, которая задаётся модификаторами класса private, public, protected или отсутствием модификатора:

Таблица 19. Модификаторы и доступ в Java


private


protected

public

тот же класс

да

да

да

да

подкласс в том же пакете

нет

да

да

да

независимый класс в том же пакете

нет

да

да

да

подкласс в другом пакете

нёт

нет

да

да

независимый класс в другом пакете

нет

нет

нет

да

Разработка интерфейса для упрощённого использования функции телефонии Callback


Наиболее простым интерфейсом для пользователя является стандартный интерфейс его системы. Алгоритм звонка при использовании функции Callback не должен отличаться от обычного алгоритма инициализации звонка.

Интерфейс такой программы должен помогать реализовать следующие функции:

1.      Callback

o     Запуск приложения при инициализации звонка из контактной книги(Contacts)

o     Инициализация звонка на сервер телефонии

o     Приём звонка от сервера телефонии

o     Определение того, что установлен канал связи

o     Анализ DTMF сигналов от сервера

o     Передача DTMF сигнала во время звонка

2.      Работа с историей

o     Возможность удалять информацию из системного журнала истории вызовов

o     Возможность добавлять информацию в системный журнал истории вызовов

3.      Настройки

o     Включить/выключить профиль

o     Возможность выбрать профиль

o     Возможность настроить профиль

o     Возможность добавить профиль

o     Возможность удалить профиль

4.      Профили

o     Возможность изменять номер сервера

o     Возможность задать белый список номеров сервера

o     Возможность указать время ожидания обратного звонка от сервера

o     Возможность указать интервал между отправляемым сигналом DTMF

Алгоритм приложения с такими функциями следующий:

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

После настройки приложения пользователь может вызвать абонента из контактной книги. В это время появится меню выбора приложения, с помощью которого можно звонить. Если пользователь выберет DTMF Callback, то номер контакта будет сохранён приложением, а само приложение инициализирует вызов с сервером. Когда сервер разорвёт связь и перезвонит, приложение ответит на звонок и наберёт в тональном наборе сохранённый номер, после этого пользователю нужно будет дождаться соединения с вызываемым абонентом.

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

Разработка прототипа, который демонстрирует возможности по упрощению использования функции Callback

Исходя их реальных возможностей и нулевого опыта разработки под Android, были разработаны минимальные требования к прототипу:

.        Прототип должен запускаться на всех современных устройствах под Android начиная от Android 2.1 и заканчивая Android 5.1

.        Прототип должен упросить набор номера абонента, когда перезвонит сервер телефонии

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

 

Инициализация вызова на указанный номер


Первым этапом разработки стало написание приложения, которое может осуществлять вызов на прописанный в коде приложения номер. Данный метод, когда значения переменных жёстко задаются в коде, а не берутся из внешних источников, называется hard coding. Такой метод применяется специально для быстрого тестирования приложения, чтобы каждый раз не набирать номер.

Было принято решение писать на языке программирования python, так как у меня имеется опыт написания на этом языке [40]. Для реализации понадобилось подключить Java класс android.intent.action.CALL из API Android. Целью данного приложения является тестирование возможности вызова любого абонента приложением. Данная функция нужна, чтобы после вызова абонентом «A» на номер абонента «B» начался звонок на номер сервера телефонии. После реализации этой функции стало ясно, что, несмотря на мой опыт, написание приложений под python всплывает множество неочевидных проблем, а в результате готовое приложение слишком долго загружается, что достаточно критично для телефонии. Также стало очевидно, что понимать API без знания языка программирования Java будет очень тяжело. Так как всё равно требовалось понимание языка программирования Java, а итоговый результат на Java давал преимущества, было принято решение переписать функцию под Java, используя Android Studio. Вот код итоговой функции под Java:

public void Call(View view) {

mNumberTextView.setText("Вызов на " + tel.getText() + " Инициализрован");

String toDial = "tel:" + tel.getText().toString();(new Intent(Intent.ACTION_CALL, Uri.parse(toDial)));

}

}

 

Приём номера из контактной книги


Для того чтобы android-приложение было вызвано из другого приложения можно использовать явные и неявные Намерения(Intent). В явном Намерении указывается, какой класс оно должно вызвать:

Intent intent_about = new Intent(MainActivity.this, AboutActivity.class);

startActivity(intent_about);

Активность AboutActivity.class прописана в Android.Manifest.xml, поэтому система знает какую активность надо запустить.

В неявном Намерении вместо класса, который надо запустить указывается действие, на которое должна среагировать система. В стандартной контактной книге(Contacts) в android, при вызове из неё происходит действие ACTION_CALL_PRIVELEGED. В это действие передаётся номер «tel:». Например, мы можем с помощью adb позвонить этим действием, написав:

adb -e shell am start -a android.intent.action.CALL_PRIVILEGED -d tel:911

,где 100 - это номер, куда позвонит телефон. Если прописать командуshell am start -a android.intent.action.CALL -d tel:911

При этом звонка не будет, так как не будет привилегий позвонить на такой номер. В зависимости от надобности, разные приложения могут использовать различные действия. Если экстренных вызовов не предполагается, то будет использоваться именно ACTION_CALL. Это более частый случай для вызовов из браузера или приложения с контактным номером.

На некоторых прошивках в качестве контактной книги может использоваться альтернативное приложение. Сам исходный код данного приложения может быть закрытым. Если в таких приложениях звонок инициируется как-то иначе, то угадать, через какой Intent инициируется звонок, может быть тяжело. В таком случае можно поставить альтернативную контактную книгу из Google Play или других доверенных источников.

Чтобы программа перехватила неявное Намерение надо в AndroidManifest.xml добавить intent-filter:

<intent-filter>

<action android:name="android.intent.action.CALL_PRIVILEGED"/>

<action android:name="android.intent.action.CALL"/>

<data android:scheme="tel"/>

</intent-filter>

Так как из контактной книги нужно взять только номер в scheme указывается «tel».

Теперь операционная система Android будет предлагать каждый раз вызвать приложение, когда будет вызываться Намерение ACTION_CALL или ACTION_CALL_PRIVILEGED.

Чтобы приложение могло использовать номер, который был в «tel» надо в нужном нам классе воспользоваться методом getData():

 

Плавающее окошко с кнопкой


Существует библиотека под названием StandOut с помощью, которой можно создать плавающее окно [41]. Библиотека имеем открытый исходный код и примеры [42]. Данная библиотека распространяется под свободной лицензией MIT [43]. Данная лицензия позволяет свободно распространять программное обеспечение, которое содержит эту библиотек. Библиотека поставляется как есть, ответственность за вред, который она может нанести, авторы не несут.

Особенности данной библиотеки:

·        Предоставление своего собственного VIEW. Лёгкая интеграция.

·        Декораторы плавающих окон:

.        заголовок плавающего окна

.        кнопка, которая сворачивает плавающее окно

.        кнопка, которая закрывает плавающее окно

.        кнопка для изменения размеров окна

·        Свёрнутое окно можно восстановить

·        Создание окон разных типов

·        Окна можно перемещать

При тестировании примеров из данной библиотеки было обнаружено, что плавающие окна могут находиться поверх всех окон, в том числе и во время звонка. Данную особенность можно использовать, чтобы создать кнопку, которая будет набирать нужный номер в dialer во время звонка.

Для того чтобы создать окно надо написать класс, который будет расширением класса StandOutWindow:

public class FloatingButton extends StandOutWindow {

}

Далее следует внутрь этого класса добавить метод создания окна:

@Overridevoid createAndAttachView(int id, FrameLayout frame) {inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);view = inflater.inflate(R.layout.floating_button, frame, true);

А в res/layouts слой с описанием интерфейса этого окна floating_button.xml.

Кнопка для плавающего окна

Для плавающего окна в StandOut можно создавать кнопки, также как это делается и для обычных Активити. Следующий код следует добавить, чтобы всё пространство Активити заполняла кнопка:

<Button:layout_width="match_parent":layout_height="match_parent":text="Набрать номер":id="@+id/button4"/>

В классе FloatingButton.java можно написать обработчик для нажатия на кнопку:

Button button = (Button) view.findViewById(R.id.button4);.setOnClickListener(new View.OnClickListener() {

@Overridevoid onClick(View v) {rescommand = "input text '" + tel + "'";{.getRuntime().exec(new String[]{"su", "-c", rescommand});

} catch (IOException e) {.printStackTrace();

}

}

});

Данный обработчик будет отрабатываться при нажатии кнопки под id button4.

Строка rescommand содержит в себе команду, которая будет выполнена с правами root из консоли. Команда input text вводит в любое окно указанный текст, будто бы он был набран с клавиатуры. В данном случае текст этот - телефон, который будет получен из телефонной книги.

 

Иконка приложения


Для того чтобы абонент мог понять направленность приложения помимо названия принято создавать иконку. Для создания иконки были привлечены выпускница МИЭМ НИУ ВШЭ по направлению дизайн Мария Григорьевна Флейтман и выпускник НИУ ВШЭ по направлению вэб-дизайн Решетько Андрей Владимирович.

В ходе составления задания для дизайнеров было выдвинуто два предположения:

.        так как DTMF Callback в первую очередь является приложением для телефонии, то вполне логично использовать в иконке трубку, символизирующую звонок. Поэтому была идея поместить трубку в середину, а вокруг неё поместить волны в виде кругов.

.        слово Callback состоит из двух слов call(звонок) и back(назад). Первые буквы этих слов будут символизировать слово CallBack. Волны вокруг DTMF сигнал.

В результате были получены следующие иконки:

Рисунок 16. Иконка с трубкой 1

Рисунок 17. Иконка с трубкой 2

Рисунок 18. Иконка с трубкой 3

Рисунок 19. Иконка CB 1

Рисунок 20. Иконка CB 2

Иконка с трубкой 1 и Иконка CB 1 сделаны в стиле старых приложений, где используется градиент. Из середины цвет плавно перетекает к краям. Остальные иконки сделаны в более современном плоском дизайне, где каждое кольцо залито своим одним цветом. По моему мнению, получаются толстые полоски, которые плохо отражают волны. В то время, на градиенте кольца расходятся, как рябь по воде, что ассоциируется с волной.

Трубка создаёт стойкую ассоциацию, что приложение создано для звонков, в то время, как буквы CB не создают такого впечатления. Было принято решение использовать Иконку с трубкой 1.

 

Результат


Результатом разработки стало готовое приложение под названием DTMF CallBack, которое упрощает использование функции телефонии Callback и отвечает минимальным требованиям к прототипу.

Экспериментальная часть

 

Проведение тестирования рабочего прототипа


Тестирование приложения проводилось на трёх устройствах:

1.      Samsung galaxy s2, Android 4.1.2

2.      Sony xperia z1, Android 4.4.4

.        Эмулятор x86, Android 5.1

.        Эмулятор x86, Android 2.1

Тестирование приёма номера из контактной книги проводилось вручную. В интерфейсе телефона выбиралось приложение Контакты (Contacts) и в нём выполнялась попытка позвонить на номер одного из контактов. Первое устройство предлагало использовать DTMF Callback для вызова, остальные три не предлагали. Стороннее приложение Контакты + [44] всегда предлагало использовать DTMF Callback.

Тестирование плавающего окна проводилось путём его инициализации, закрытия, перетаскивания вручную. На всех устройствах плавающее окно работало одинаково.

Кнопка для плавающего окна тестировалась с предварительно разблокированными root правами на устройство и передачей root прав приложению DTMF Callback. Кнопка тестировалась как в обычных текстовых полях, так и во время входящего или исходящего вызова в dialer. Кнопка работала на всех трёх устройствах одинаково.

Заключение

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

В работе рассмотрен принцип работы DTMF Callback и его недостатки. Представлены существующие способы решения недостатков. Предложен вариант программной реализации исправлению недостатков. Разработан и протестирован прототип приложения, которое устраняет часть недостатков.

Глоссарий

Роуминг - услуга по предоставлению абоненту связи другим оператором, вне зоны действия сети оператора абонента

Мигранты - «люди, вынужденные покинуть свое место жительства в силу каких-либо неблагоприятных причин» [45]

₽ - является официальным символом для обозначения для обозначения рубля [46]. Его Юникод: U+20BD [47]

€ - является символом для обозначения евро. Его Юникод: U+20AC [48].

$ - является символом для обозначения доллара США. Его Юникод: U+0024.

Список литературы

.     Особенности сотовой связи URL: http://www.diagram.com.ua/list/phones/phones30.shtml (дата обращения: 10.Май.2015).

.     Основные компоненты телефонного аппарата использующего проводную связь. URL: http://izmer-ls.ru/ta.html (дата обращения: 12.Март.2015).

.     Декодировка сигналов тонального набора номера URL: http://kazus.ru/articles/149.html (дата обращения: 10.Май.2015).

.     ОАО МТС. Основные финансовые показатели второго квартала 2014 года по Группе МТС 2014. URL: http://static.mts.ru/uploadmsk/contents/1670/140820_fio_2_kv_2014_press_reliz.pdf (дата обращения: 23.Март.2015).

.     ОАО Мегафон. Консолидированная финансовая отчетность 2015. URL: http://corp.megafon.ru/download/~federal/docs/MEGAFON_2014_IFRS_FS_RUS.pdf (дата обращения: 23.март.2015).

.     Advanced Communications & Media. 3Q 2014 Cellular Data 2015. URL: http://www.acm-consulting.com/data-downloads/cat_view/7-cellular/22-cellular-2014.html (дата обращения: 23.Март.2015).

.     Тариф Smart mini URL: http://static.mts.ru/uploadmsk/contents/1901/smart_mini_msk_150515.pdf (дата обращения: 2015.Май.2015).

.     МегаФон - Всё включено XS URL: http://moscow.megafon.ru/download/~msk/tariffs/new/all_inclusive_xs.pdf (дата обращения: 15.Мая.2015).

.     Расценки на услуги в сети Билайн «Всё за 200» URL: http://static.beeline.ru/upload/dpcupload/images/vse_za_200_prepaid_30_04_15.pdf (дата обращения: 15.Май.2015).

.     Тариф Smart URL: http://static.mts.ru/uploadmsk/contents/1901/smart_msk_06042015.pdf (дата обращения: 16.Май.2015).

.     «МегаФон - Всё включено S» URL: http://moscow.megafon.ru/download/~msk/tariffs/new/megafon_-_vse_vklucheno_S.pdf (дата обращения: 16.Май.2015).

.     Расценки на услуги в сети Билайн «Всё за 400» URL: http://static.beeline.ru/upload/dpcupload/images/vse_za_400_prepaid_30_04_15.pdf (дата обращения: 16.Май.2015).

.     «МегаФон - Всё включено M» URL: http://moscow.megafon.ru/download/~msk/tariffs/new/megafon_-_vse_vklucheno_M.pdf (дата обращения: 16.Май.2015).

.     Расценки на услуги в сети Билайн «Всё за 600» URL: http://static.beeline.ru/upload/dpcupload/images/vse_za_600_prepaid_30_04_15.pdf (дата обращения: 16.Май.2015).

.     Тариф Smart+ URL: http://static.mts.ru/uploadmsk/contents/1901/smart_plus_msk_190515.pdf (дата обращения: 16.Май.2015).

.     Всё за «900» URL: http://static.beeline.ru/upload/dpcupload/images/vse_za_900_prepaid_30_04_15.pdf (дата обращения: 16.Май.2015).

.     Тариф Smart Top URL: http://static.mts.ru/uploadmsk/contents/1901/smart_top_msk_190515.pdf (дата обращения: 17.Май.2015).

.     Мегафон - Всё включено L URL: http://moscow.megafon.ru/download/~msk/~moscow/tariff_pdf/megafon_-_vse_vklucheno_L.pdf

.     Расценки на услуги в сети Билайн «Всё за 1500» URL: http://static.beeline.ru/upload/dpcupload/images/vse_za_1500_prepaid_30_04_15.pdf (дата обращения: 20.Май.2015).

.     «МегаФон - Всё включено VIP» URL: http://moscow.megafon.ru/download/~msk/~moscow/tariff_pdf/megafon_-_vse_vklucheno_VIP.pdf (дата обращения: 22.Май.2015).

.     Ассоциация туроператоров России (АТОР) опубликовала список самых популярных летних курортов россиян 2014 года 2014. URL: http://mir24.tv/news/smiruponitke/10948391 (дата обращения: 20.Май.2015).

.     Выгодные международные звонки. URL: http://www.mts.ru/mob_connect/roaming/calls_abroad/discounts_and_special_offers/vyigodnyie_zvonki/ (дата обращения: 24.Май.2015).

.     Тариф «Добро пожаловать». URL: http://moskva.beeline.ru/customers/products/mobile/tariffs/details/dobro-pozhalovat/ (дата обращения: 24.Май.2015).

.     Звони во все страны. URL: http://moscow.megafon.ru/tariffs/options/far_calls/all_countries.html (дата обращения: 24.Май.2015).

.     Центральный банк Российской Федерации установил с 26.05.2015 следующие курсы иностранных валют к рублю Российской Федерации без обязательств Банка России покупать или продавать указанные валюты по данному курсу // Центральный банка Российской Федерации. URL: http://www.cbr.ru/currency_base/daily.aspx?date_req=26.05.2015 (дата обращения: 26.Май.2015).

.     Тарифы Skypeна мобильные и стационарные телефоны во всем мире 2015. URL: https://www.skype.com/ru/rates/?nu=subs-calling# (дата обращения: 26.Май.2015).

.     Исходящие звонки от 11,9 руб URL: http://www.mts.ru/mob_connect/roaming/i_roaming/discount_roaming/137/ (дата обращения: 26.Май.2015).

.     Обратный звонок URL: moscow.megafon.ru/roaming/services/20110617-1735.html (дата обращения: 26.Май.2015).

29.    Prefixer // Приложения на Google Play. URL: https://play.google.com/store/apps/details?id=com.tftbelow.prefixer (дата обращения: 23.03.2015).

.        GameKeyboard // Приложения на Google Play. URL: https://play.google.com/store/apps/details?id=com.locnet.gamekeyboard2 (дата обращения: 16.апрель.2015).

.        Introduction to Android // Android Developers. URL: http://developer.android.com/guide/index.html (дата обращения: 16.апрель.2015).

.        Android NDK // Android Developers. URL: http://developer.android.com/tools/sdk/ndk/index.html (дата обращения: 17.аперель.2015).

.        Introduction to Mobile Development // Xamarin. URL: http://developer.xamarin.com/guides/cross-platform/getting_started/introduction_to_mobile_development/ (дата обращения: 18.апрель.2015).

.        Python for Android 1.2 documentation URL: http://python-for-android.readthedocs.org/en/latest/toolchain/#introduction (дата обращения: 19.апрель.2015).

.        Java API (pyjnius) URL: http://python-for-android.readthedocs.org/en/latest/javaapi/ (дата обращения: 19.апрель.2015).

.        Android Studio Overview // Android Developers. URL: https://developer.android.com/tools/studio/index.html (дата обращения: 10.Май.2015).

.        Груздев Д. Ликбез по типизации в языках программирования 2012. URL: http://habrahabr.ru/post/161205/ (дата обращения: 16.Май.2015).

.        Guo P. Python is Now the Most Popular Introductory Teaching Language at Top U.S. Universities 2014. URL: http://cacm.acm.org/blogs/blog-cacm/176450-python-is-now-the-most-popular-introductory-teaching-language-at-top-us-universities/fulltext (дата обращения: 12.Май.2015).

.        Александр К. Классы и объекты URL: http://developer.alexanderklimov.ru/android/java/class.php (дата обращения: 15.Май.2015).

.        Страница репозиторие Михаила Флейтмана // Github. URL: https://github.com/fleytman?tab=repositories (дата обращения: 10.Май.2015).

.        Mark W. StandOut - Create Floating Apps 2012. URL: http://forum.xda-developers.com/showthread.php?t=1688531 (дата обращения: 15.Апрель.2015).

.        StandOut lets you easily create floating windows in your Android app // GitHub. 2014. URL: https://github.com/pingpongboss/StandOut (дата обращения: 14.Май.2015).

.        Текст лицензии на библиотнек StandOut 2012. URL: https://raw.githubusercontent.com/pingpongboss/StandOut/master/COPYING (дата обращения: 15.Май.2015).

.        Contacts Plus team. Контакты + URL: https://play.google.com/store/apps/details?id=com.contapps.android (дата обращения: 12.Май.2015).

.        Т.Ф. Е. Мигранты // Современный толковый словарь русского языка Ефремовой. URL: http://dic.academic.ru/dic.nsf/efremova/186002

.        Cимвол рубля // Центральный банк Российской Федерации. 2013. URL: http://www.cbr.ru/today/?prtid=voterub (дата обращения: 16.Май.2015).

.        Дизайнер Лебедев заявил об утверждении знака рубля в Unicode // ВЗГЛЯД. 2014. URL: http://www.vz.ru/news/2014/2/5/671173.html (дата обращения: 16.Май.2015).

.        Kuhn M. ISO/IEC 8859-16:2001 to Unicode 2001. URL: http://www.unicode.org/Public/MAPPINGS/ISO8859/8859-16.TXT (дата обращения: 26.Май.2015).

Похожие работы на - Разработка рабочего прототипа приложения, которое будет облегчать использование функции телефонии DTMF Callback на устройствах с Android

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!