Декодування dtmf сигналу в Android. Машинка керована мобільним телефоном. Ініціалізація виклику на вказаний номер

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

Хоча зовнішній вигляді можливості моделі можуть значно змінюватись, всі моделі мають механічну частину і частину, яка керує моделлю. Управління моделлю включає три етапи: прийом команди, обробка і виконання. Як правило, команди дають зовнішні датчики, обробкою займається мікроконтролер, а виконання використовуються двигуни.

Огляд

У цій машинці для керування використовується два мобільні телефони – один у вас в руках як пульт дистанційного керування, інший встановлений на моделі як приймач. З телефону на телефон моделі надходить дзвінок, і при натисканні вами під час дзвінка клавіш, з мобільного телефону надходить багаточастотний сигнал. Цей сигнал називається Dual-Tone Multi-Frequency (двотональний багаточастотний сигнал) (DTMF).
За допомогою DTMF декодера MT8870 DTMF декодується в двійковий код, який обробляється мікроконтролером ATmega16, а потім віддає команду драйверу двигуна.

Як видно, ця модель досить проста і не потребує конструювання складних передавачів.
DTMF сигнал використовується для набору телефонного номера або голосового автовідповіді.
Сигнал складається з двох синусоїдальних сигналів фіксованої частоти і легко декодується в двійковий код і назад. Для кодування символу в DTMF сигнал необхідно скласти два синусоїдальні сигнали. Наприклад, якщо треба передати цифру 5, частота одного сигналу буде 1336 Гц, а іншого 770 Гц, і цей сигнал ми отримаємо на другому телефоні.

Опис схеми

На блок-схемі показано принцип роботи пристрою. Основними його компонентами є DTMF декодер, мікроконтролер та драйвер двигунів.

Як DTMF декодера використовується мікросхема MT8870. У ній використовуються цифрові методи розпізнавання сигналу і видається сигнал на 4 виводи. Також вона не вимагає попереднього фільтрування вхідного сигналу. При подачі вхідного сигналу на PIN2 (В-) декодований сигнал виходить на висновках від Q1(pin11) до (pin14).

ATmega16 - це 8-бітний КМОП мікроконтролер на основі розширеної AVR RISC архітектури з низьким енергоспоживанням. Він має 16 КБ програмованої флеш-пам'яті, 512 Б EEPROM, 1 КБ SRAM, 32 ліній вводу/виводу та 32 регістри. З висновків мікроконтролера PD0 – PD3 та PD7 подається сигнал на виходи IN1 – IN4 та EN1-EN2 драйвера двигунів L293d. Перемикач S1 використовується для ручного скидання.

Програма

Мікроконтролер програмується з допомогою WIN AVR. Хто не знає як це робити, подивіться, там все докладно описано. До статті додається вихідний файл і hex. Якщо встановлено WinAVR, то проблем із відкриттям виникнути не повинно.

Робота

Для того, щоб керувати моделлю, ви повинні зателефонувати до мобільного телефону моделі з будь-якого телефону. Коли машинка автоматично відповіла, натискайте такі клавіші:
2 – рух уперед.
4 – поворот ліворуч.
8 – рух у зворотному напрямку.
6 – поворот праворуч.
5 – зупинка.

Список елементів:
DTMF декодер MT8870 – 1.
Мікроконтролер Atmega16 - 1.
Драйвер двигуна L293d – 1
ОУ CD7004 - 1.
Діод 1N4007 - 1.
Резистор 100 ком - 2.
Резистор 10 ком - 5.
Резистор 330 ком - 1.
Конденсатор 0.47мкФ - 1.
Конденсатор 0.1мкФ - 1.
Конденсатор 22пФ - 4.
Кварц 3.57 МГц - 1.
Кварц 12 МГц - 1.
Кнопка без фіксації – 1.
Двигуни (6В, 50 rpm) – 2 або 4 для повного приводу.
Акумулятор 6В – 1.
Колеса – 4.
Мобільний телефон – 2.
Гучний зв'язок (hands-free) - 1.

Ви повинні зміцнити телефон на шасі. Телефон підключений до роботи через гарнітуру hands – free.

Підключення hands - free
Я використав hands – free з роз'ємом mini jack.

Завантажити вихідний код програми та прошивку ви можете нижче

Список радіоелементів

Позначення Тип Номінал Кількість ПриміткаМагазинМій блокнот
IC1 DTMF декодерМТ88701 До блокноту
IC2 МК AVR 8-біт

ATmega16

1 До блокноту
IC3 Драйвер електродвигунівL293D1 До блокноту
IC4 ІС буфера, драйвера

SN74LS04

1 До блокноту
D1 Випрямний діод

1N4007

1 До блокноту
С1 Конденсатор0.47 мкф1 До блокноту
С2, С3, С5, С6 Конденсатор22 пФ4 До блокноту
С4 Конденсатор0.1 мкФ1 До блокноту
R1, R2 Резистор

100 ком

2 До блокноту
R3 Резистор

330 ком

1 До блокноту
R4-R8 Резистор

10 ком

5 До блокноту
XTAL1 Кварцовий резонатор3.57 МГц1 До блокноту
XTAL2 Кварцовий резонатор12 МГц1

DTMF (Dual-Tone MultiFrequency)- це тональний сигнал, який генерується при натисканні на кнопки телефону.
DTMF широко застосовується в роботі автовідповідачів (IVR) для різних інтерактивних систем. У додатку до VoIP, під час роботи з різними кодеками DTMF вимагає досить пильної уваги, тому його роботу потрібно чітко розуміти.

За замовчуванням Gateway надсилає DTMF у потоці RTP ( in-band), це чудово працює при використанні кодека high-bit-rate G.711, тобто. якщо голосовий потік не піддається стиску.
Основна проблема з DTMF виникає під час використання алгоритмів стиснення, наприклад кодека G.729. Справа в тому, що при стисканні якість головного потоку помітно погіршується, і хоча це майже не позначається на здатності абонентів розуміти один одного, DTMF тон вже мало чіткий і сприймається неправильно.

Ця проблема вирішується за допомогою DTMF Relay, при якому сигнали DTMF транспортуються окремо від потоку RTP або out-of-band.

Розглянемо кілька прикладів.


На малюнку зображено схему підключення телефонії через шлюз H.323.

На ділянці PSTN DTMF надається in-band, тобто. там навіть немає поняття DTMF Relay, оскільки це аналогова лінія.

DTMF relay стає потрібним тільки на ділянці VoIP, де можливе застосування методів компресії.
Також можна сказати, що:
- in-band DTMF relay йтиме всередині потоку RTP, тобто. на малюнку по червоній лінії RTP.
- out-of-band DTMF relay йтиме разом із сигналізацією, тобто. по зелених лініях малюнку.

На дільницях телефон-CUCMі CUCM-H.323Gatewayвикористовується різна сигналізація, і отже різні методи DTMF relay. З боку телефону приходить SCCP messages, що містять DTMF у своєму кодуванні, з боку H.323 gateway сигналізація разом з DTMF йде H.245 messages.
CUCM у нашому випадку виступає як DTMF Forwarder між різними типамисигналізацій.

На ділянці телефон-CUCMу нас буде можлива тільки out-of-band, оскільки SCCP-шний телефон не підтримує in-band.
На ділянці CUCM-H.323Gatewayможливі методи як in-band, так і out-of-band. При цьому у випадку SCCP-шного телефону для включення in-bandзнадобиться використання MTP.

Також потрібно розуміти, що налаштування DTMF для H.323 Trunk - це налаштування для роботи цього транку з Dial-peer на фізичному H.323 Gateway.

Залежно від протоколу сигналізації (H.323, SIP, MGCP, SCCP), існують різні методи здійснення DTMF Relay. У будь-якому випадку Call Manager CUCM спочатку намагається некоціювати загальний для всіх метод. Якщо спільний метод не знайдено, спроба використовувати MTP.

H.323 DTMF Support

Cisco Gateways підтримує такі методи DTMF Relay:

  • Cisco proprietary: - in-band DTMF relay. DTMF надсилається в тому ж потоці RTP як і голос, але тони DTMF кодуються трохи інакше, що дозволяє їх успішно відрізняти та приймати на тій стороні. Семпли DTMF ідентифікуються як RTP payload type 121. Метод працює тільки якщо на обох сторонах обладнання Cisco, а також той самий метод
  • H.245 Alphanumeric:-Out-of-band DTMF relay. Відокремлює DTMF від потоку RTP і надсилає їх через H.245 User Input Indication messages. При цьому методі не надсилається tone length: завжди вважається що довжина тону 500msec.
    У цьому прикладі ми натиснули "5".

    Дебаг: debug h245 asn1

  • H.245 Signal:-Out-of-band DTMF relay. Цей метод здатний відсилати довжину тону ( tone length).

    Дебаг: debug h245 asn1

  • NTE:- in-band DTMF relay. Працює подібно до Cisco proprietary, DTMF відсилається в тому ж потоці RTP як і голос, з використанням RTP payload type. Інша payload не дозволяє семпли DTMF піддавати стиску. На відміну від Cisco proprietary, NTEвикористовує стандарт RFC 2833.

    Дебаг: debug h245 asn1

На маршрутизаторі Cisco доступні такі команди:

Router(config-dial-peer)#dtmf-relay? cisco-rtp Cisco Proprietary RTP h245-alphanumeric DTMF Relay via H245 Alphanumeric IE h245-signal DTMF Relay via H245 Signal IE rtp-nte RTP

Найкраща практика:
На діалпірі найкраще давати команди так:

Dial-peer Voice 3000 Voip Description Long calls destination-pattern ... session target ipv4:192.168.0.11 dtmf-relay h245-signal h245-alphanumeric cisco-rtp

У цьому випадку обидві сторони можуть купувати відповідний метод dtmf-relay між собою.

Для визначення вибраного DTMF relay method:
show call active voice

Router#show call active voice ........... PeerAddress=5001 ........... tx_DtmfRelay=rtp-nte

Таким чином, CUCM автоматично перевіряє, який метод DTMF підійде обом сторонам.
Щодо H.323 Gateway у CUCM, там налаштувань DTMF немає. CUCM приймає налаштування іншої сторони.

MGCP DTMF Support

Для MGCP доступні такі методи DTMF Relay:

  • Cisco proprietary: DTMF надсилається в тому ж потоці RTP як і голос, але тони DTMF кодуються трохи інакше, що дозволяє їх успішно відрізняти та приймати на тій стороні. Семпли DTMF ідентифікуються як RTP payload type 121. Метод працює тільки якщо на обох сторонах обладнання Cisco і вибраний аналогічний метод (нічого не купується).
  • NSE: NSE – це насправді Cisco Proprietary NTE. Метод працює тільки якщо на обох сторонах обладнання Cisco і вибраний аналогічний метод (нічого не купується).
  • NTE:у свою чергу може працювати у двох режимах:
    - Gateway-контрольований режим (NTE GW): Gateways домовляються один з одним про DTMF самостійно, обмінюючись capability information у SDP messages. Цей процес прозорий для Call Agent. При цьому в обох шлюзів запущено MGCP і обидва підключені до однакового CUCM.
    - Call agent-controlled mode (NTE CA):У купці використовується Call Agent, тобто. виступає від імені MGCP-шлюзу (повідомлення SDP надсилаються на Агента). Ця mode може бути використана у разі коли другий шлюз не є MGCP-Gateway. Після купації Call Agent інструктує шлюз, про прийняті з іншого боку RTP-NTE values.
  • Out-of-band:Тони надсилаються на CUCM з допомогою MGCP, тобто. поза потоком RTP (Out-of-band). CUCM у свою чергу приймає DTMF та передає іншій стороні.

MGCP використовує DTMF relay тільки для low-rate codecs (G729, iLBC, GSM, etc). Для bit-rate codecs G711 DTMF буде надіслано in-band.

У випадку з MGCP ми можемо вибрати, чи будуть налаштування DTMF диктуватися Call Agent-ом (CUCM) або ж будуть використані ті, що виставлені на Gateway.
Зайдемо на CUCM: Device > GatewayВибираємо відповідний MGCP Gateway.
Нас цікавить розділ Type of DTMF Relay.

При виборі Current GW Config, буде використано налаштування, яке стоїть на шлюзі.
На IOS Gateway ми можемо виставити DTMF наступною командою:

Router(config)#mgcp dtmf-relay voip codec all mode? cisco Set mgcp dtmf-relay mode для be cisco disabled Set mgcp dtmf-relay mode для be disabled nse Set mgcp dtmf-relay mode для be nse nte-ca Set mgcp dtmf-relay mode для be nte-ca nte-gw Set mgcp dtmf -relay mode to be nte-gw out-of-band Set mgcp dtmf-relay mode to be out-of-band

Якщо ми виставимо на CUCM інший вибір, наприклад cisco, відповідна вищенаведена команди буде введена автоматично (механізмами MGCP).

З MGCP був помічений баг:

CSCta69407 Bug Details(Якщо ви використовуєте будь-який тип сканування DTMF (RTP-NTE, NSE, або Cisco Proprietary) DSP's не турбує OOB dtmf signaling використання mgcp пакетів. rtp and other coming from CUCM)

Workaround: Use mgcp dtmf-relay type out-of-band.

SIP DTMF

За замовчуванням SIP надсилає DTMF in-band, але ми можемо використовувати такі опції:

  • RTP-NTE (NTEабо RFC 2833) - in-band DTMF relay. Який для перенесення інформації DTMF використовує замість голосових пакети RTP Named Telephony Event (NTE). При цьому SDP використовується для купування між вузлами значення payload type=NTE. Хоча формально це in-band, але реально тон у звуковому потоці чути не буде, оскільки пакети NTE не голосові
    RTP-NTE не вміє працювати з телефонами SCCP, оскільки телефони SCCP використовують лише out-of-band DTMF relay. Тому спільно з RTP-NTE необхідно використовувати MTP.
  • SIP INFO - out-of-band(OOB) DTMF relay. Інформація DTMF надсилається у SIP-повідомленнях INFO. Тобто. якщо шлюз отримує повідомлення INFO, він дає відповідний тон.
  • SIP NOTIFY - out-of-band(OOB) DTMF relay. або його ще називають NOTIFY-based out-of-band DTMF relay. Цей тип DTMF relay використовує NOTIFY для передачі тонів. Цей метод сумісний із телефонами SCCP, також його можна використовувати при підключених аналогових телефонах до портів FXS на шлюзі.
  • KPML - out-of-band(OOB) DTMF relay. При використанні Key Press Markup Language телефон SIP надсилає номер за цифрою digit-by-digit. Цей метод схожий SIP NOTIFY, З тією лише відмінністю, що віддає кожну цифру окремо.
router(config-dial-peer)#session protocol sipv2 router(config-dial-peer)#dtmf-relay ? cisco-rtp Cisco Proprietary RTP h245-alphanumeric DTMF Relay via H245 Alphanumeric IE h245-signal DTMF Relay via H245 via SIP NOTIFY messages router(config-dial-peer)#

Тут ми бачимо кілька доступних методів, для роботи з CUCM годяться тільки
- RTP-NTE (NTEабо RFC 2833);
- SIP-NOTIFY;
- SIP-KPML.

Всім привіт.
Хочете керувати чимось по стільниковому телефону, та ще й без будь-яких хитромудрих мікроконтролерів? Якщо так, ласкаво просимо під кат.

Останнім часом на Муську було кілька оглядів GSM-модулів, типу SIM800, використовуючи які можна керувати чим завгодно по стільниковій мережі. Але біда, всі вони вимагають підключення до мікроконтролера, написання прошивки та інших складних для непосвяченої людини речей. Інша крайність це: «а я до вібромоторчика телефону реле припаяв, у мене все працює»:)) Так теж можна, але не варто дивуватися, якщо вашу теплицю намагатиметься поливати насос водою з замерзлої криниці, після приходу СМС «З Новим Роком!» від невідомого відправника:)))
Загалом, я вирішив заповнити прогалину між цими двома рішеннями і запропонувати своє.

Сьогодні мова піде про декодера DTMF сигналу, або, якщо по-простому, тональний сигнал.
Цікаві можуть почитати
Технологія досить застаріла, але й досі підтримується всіма телефонами.
Власне, саме тоновий набір ви використовуєте, коли телефонуєте до якогось закладу, а вам автовідповідач каже: «якщо ви знаєте номер абонента, натисніть „1“, якщо ви хочете дізнатися про наші нові пропозиції, натисніть „2“ і так далі. Натискаючи кнопку з потрібною цифрою на телефоні, ви відправляєте голосовим каналом сигнал певної тональності. Кожному символу на телефонній клавіатурі відповідає своя „мелодія“. Саме цей звук і розшифровує декодер DTMF, перетворюючи його на сигнали на своїх виходах.


Плата зібрана на мікросхемі, живиться від 5 Вольт і має наступні висновки: Q1-Q4-дискретні виходи, StQ/StQ інверсно-виходи, які спрацьовують при кожному правильному розпізнаванні сигналу. IN-вхід для аудіосигналу, якщо ви не хочете використовувати роз'яте на платі 3.5 мм роз'єм. GND/VCC живлення, 5 Вольт.
Виходи Q1-Q4 спрацьовують відповідно до таблиці:

Наприклад, зараз у мене на платі горять два середні світлодіоди, спрацювали виходи Q2 і Q3 дивимося таблицю-це відповідає натиснутій клавіші „6“. Якщо натисніть клавішу „1“, то спрацює вихід Q1, якщо „2“, то Q2. Якщо „3“, то „засвітяться“ виходи Q1 та Q2 одночасно. І так далі.
Загалом це 4-бітний код. Якщо його дешифрувати спеціальною мікросхемою, можна отримати 16 виходів.
До речі, на Алі продається плата вже з дешифратором, але дорожче. Варіант для просунутих-підключити все це до мікроконтролера, я так робив, можна навіть пароль задати-зателефонував, набрав пароль, отримав доступ до управління…
Але це не в рамках моєї статті, т.к. На початку статті я обіцяв, що все буде просто.

І так, беремо транзистор КТ815, резистор на 1.1 ком, або близько того, реле на 12, стабілізатор LM7805. Інші деталі (захисний діод 1N4007 на котушці реле, жовтенькі керамічні конденсатори 0.1 мкф та електролітичний на 1000 мкф) бажані, але працює і без них. Як навантаження до реле підключено „пищалка“.
Схему малювати не буду, навісний монтаж, на фото все видно:


З іншого боку:


Загальне харчування конструкції 12, т.к. цього вимагає реле, але плати воно знижується стабілізатором до 5 У.
3.5 мм роз'єм на платі з'єднуємо шнуром з виходом телефону навушників, налаштовуємо автопідняття трубки і все готове. Тепер, якщо зателефонувати на телефон, підключений до плати, дочекавшись зняття трубки, натиснути „1“, реле спрацює, зумер почне їсти. Якщо натиснути „2“, все вимкнеться. До речі, незалежно від того, чим ви плануєте керувати, зумер я рекомендував би залишити. Це зручно-адже його чути по телефону, і таким чином можна отримувати якийсь зворотний зв'язок: зателефонував, чуєш пищання, значить, навантаження включене:)

Зняв невеликий відеоролик, як усе це працює

Планую купити +128 Додати до обраного Огляд сподобався +72 +169

Надіслати свою гарну роботу до бази знань просто. Використовуйте форму нижче

Студенти, аспіранти, молоді вчені, які використовують базу знань у своєму навчанні та роботі, будуть вам дуже вдячні.

Розміщено на http://www.allbest.ru/

Вступ

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

Завдяки тенденції до зниження цін на ринку майже кожному громадянинові Росії став доступний свій особистий мобільний телефон.

Багато операторів зв'язку надають послуги стільникового зв'язку. Завдяки розвитку інтернет технологій набула популярності IP-телефонія, яка має ряд плюсів перед звичайною стільниковою телефонією, наприклад, захищена від прослуховувань розмова або запис розмови на сервер, використання коротких номерів, зв'язок без залучення провайдерів.

Існує кілька способів зв'язку сервера VoIP та мобільного телефону. Один з найбільш очевидних, це інтернет з'єднання, за яке зазвичай потрібно платити оператору стільникового зв'язку, якому не особливо вигідно робити інтернет-зв'язок для VoIP дешевше, ніж власні телефонні послуги. Тому ціни на тариф зі стабільним інтернетом, необхідним для дзвінків через IP телефонію, можуть бути завищені.

Існує спосіб зв'язку з VoIP сервером, який прийнято називати callback, коли серверу повідомляється, на який номер потрібно зателефонувати, і сервер передзвонює абоненту, з'єднуючи з номером, на який абонент дзвонить. Цей номер можна надіслати за допомогою Інтернету, SMS або тонального набору (DTMF).

Не завжди є можливість надіслати SMS або скористатися інтернетом, особливо якщо абонент перебуває у роумінгу. Часто, єдиний доступний спосіб зв'язку – це «традиційний» виклик за допомогою стільникового зв'язку. Існує спосіб, через який можна забезпечити зв'язок із сервером VoIP через стільниковий виклик, для цього використовується DTMF Callback за наступним алгоритмом:

1. Абонент «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 – частоти)

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

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

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

Пристрої, які керують сигналами і маршрутизують їх від одного мобільного до іншого, називаються автоматичними телефонними станціями (АТС). на даний моментБагато АТС є електронними.

Номеронабирач (dialer) – частина інтерфейсу телефонного апарату, яка дозволяє передати номер телефонного апарату, з яким АТС має з'єднати. Довгий часвикористовувалися імпульсні dialer"и, які формували імпульси, де кожній цифрі відповідало свою кількість імпульсів. На телефонному апараті знаходився диск з 10 дірками. Принцип з'єднання з АТС був таким:

На телефоні прокручується диск від точки з зазначеною цифрою, що заводить пружину. Коли відпускається диск, пружина починає розгинатися, диск починає рухатися у зворотний бік. Набір імпульсу відповідає замиканню та розмиканню телефонної лінії. Між набором імпульсів робляться паузи, щоб відрізнити набір символу від іншого. Цей спосібнабору досить незручний, абоненту доводиться кілька разів відводити диск і чекати доки він повернеться на місце. Згодом з'явився імпульсний кнопковий набір, який позбавив такого недоліку.

На даний момент для набору номера використається двотональний багаточастотний сигнал (Dual Tone Multi-Frequency, DTMF). DTMF може бути використаний для внутрішніх команд телефонної мережі. У DTMF передана цифра кодується сигналом отриманим підсумовуванням двох синусоїдальних напруг певної частоти. Використовується дві групи з чотирьох частот звукового діапазону кожної.

Таблиця 1. Відповідність частот і символів при наборі DTMF

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

Огляд ринку стільникового зв'язку

Виручка компаній, що надають стільниковий зв'язок у Росії, зростає, про що свідчать їхні звіти З тих самих звітів видно, що більша частка доходів посідає мобільний зв'язок. В інтересах як звичайного приватного користувача, так і корпоративного гравця є скорочення витрат на мобільний зв'язок. Одним із способів є аналіз послуг, що використовуються за місяць і вибір найбільш відповідного тарифу у мобільного оператора.

Ринок мобільного зв'язку в Москві складається з трьох гравців, розподіл яких можна побачити на:

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

Порівняннямісцевих тарифів по Москві

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

Мінімальними за ціною є пакетні тарифи «Smart mini» - 200?, «Все включено XS» - 199? і «Все за 200» – 200?. Є деякі особливості для дзвінків у мережі оператора. У "Smart mini" і "Все включено XS" дзвінки по всій Росії, а у "Все за 200" тільки по Москві та Московській області. Ціни вказані на час 15.05.2015.

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

Як очевидно з таблиці, тарифні опції дуже схожі. Найдешевше обходяться дзвінки всередині мережі. Абонентам інших операторів дзвонити дорожче, особливо за межі Московської області.

Хоча цей тариф не призначений для дзвінків до інших країн, у людини може виникнути потреба зателефонувати за межі своєї країни, тому варто розглянути міжнародні тарифи на дзвінки до інших країн.

Таблиця 4. Мінімальні пакетні тарифи (дзвінки за кордон)

СНД, рублів за хвилину

24 Також для Республіки Крим та м. Севастополь

Європа, рублів за хвилину

Інші країни, рублів за хвилину

США, рублів за хвилину

Канада, рублів за хвилину

Австралія та Океанія, рублів за хвилину

Азія, рублів за хвилину

СНД усередині мережі, рублів за хвилину

Північна та центральна Америка (без США та Канади), рублів за хвилину

Як видно з таблиці, тарифи надзвінки до інших країн вже відрізняються досить сильно. Білайн надає можливість за низькою ціною дзвонити на номери в інших країнах. У Мегафона більше відмінностей цін для різних країн, а у МТС навпаки єдина ціна для Європи та єдина ціна для всіх інших країн.

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

Як і у випадку з мінімальними пакетними тарифами умови дуже схожі, але ціна вже різниться.

Ціни на дзвінки в інші країни у МТС для пакетів типу «Smart» не відрізняються, як і у Мегафон для пакетів «Все включено», а ось у Білайн у пакетах «Все за» ціни на зарубіжних країн трохи відрізняються:

· У тарифі «Все за 400»: умови «Все за 200» + перші 10 хвилин на день коштують 5?, якщо дзвонити до країн СНД, Криму та Севастополя.

· У тарифі «Все за 600»: умови «Все за 400» + перші 10 хвилин на день коштують 7?, якщо дзвонити в Азербайджан, Білорусь та Молдову

· У тарифі «Все за 900»: умови «Все за 600» + перші 10 хвилин на день коштують 5?, якщо дзвонити до Європи, США та Молдови

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

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

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

Таблиця 7. Тарифні пакети вище середнього

За рівних місцевих тарифів, ціна на дзвінки іншим операторам по Росії у МТС у 3,3 рази дешевша.

Таблиця 8. Великі тарифні пакети

Ці місцеві тарифи мають майже однакові умови.

Висновок

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

Для міжнародного роумінгу існують свої умови, які відрізняються одна від одної. Цей роумінг у всіх трьох операторів дорогий, тридцятихвилинна розмова може перевищити вартість пакета послуг. Якщо абоненту доводиться дзвонити до інших країн, варто вибрати інший тариф.

Тарифи для дзвінків до інших країн

Тарифи на дзвінки до інших країн були умовно поділені на три групи:

1. Тарифи для родичів та друзів туристів

2. Тарифи для мігрантів

3. Тарифи для підприємців

Тарифи для родичів та друзів туристів

Для порівняння за тарифами для родичів та друзів туристів взято п'ять популярних курортних напрямків

1. Іспанія

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

МТС має тарифну опцію «Вигідні. міжнародні дзвінки». Абонентська плата на місяць становить 50?. Дзвінки по цих п'яти напрямках коштуватимуть 10 рублів за хвилину. Тарифна опція сумісна з іншими тарифами, наприклад «Smart».

Білайн має тариф «Ласкаво просимо» . Вартість переходу на даний тариф становить 150 ?, щомісячної абонентської плати за тариф немає, натомість є щоденна плата 4,45 ? за опції, що входять до тарифу. Вартість дзвінків до Туреччини становить 6? за хвилину. На жаль, інформації щодо інших із п'яти туристичних країн немає. На сторінці тарифу за посиланням:

http://moskva.beeline.ru/customers/products/mobile/tariffs/details/dobro-pozhalovat/

Рисунок 10. Скріншот області зі сторінки тарифу Білайн «Ласкаво просимо»

Перехід, на який перенаправляє на адресу:

http://moskva.beeline.ru/customers/products/mobile/roaming/roaming-new/

В інтерфейсі сторінки містить три гіперпосилання.

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

«Роумінг у подорожах світом», «Роумінг у подорожах Росією» та «Дзвінки з дому в інші міста та країни». Очевидно, що ціни на дзвінки в інші країни мають бути за третім гіперпосиланням. Сторінка цього посилання надає інтерфейс для запиту до сервера Білайн за інформацією.

Малюнок 12. Скріншот зі сторінки «Дзвінки з дому в інші міста та країни» після запиту «Кіпр» за тарифом «Ласкаво просимо»

Якщо перевірити ціну, наприклад, на Кіпр, замість цін на Кіпр будуть вказані загальні умови тарифу. Окремих умов для Кіпру вказано не буде. У пункті «Дзвінки до інших країн» зазначено гіперпосилання під назвою «Згідно з тарифами на міжнародний зв'язок» з адресою:

http://moskva.beeline.ru/customers/products/mobile/roaming/

За якою цієї інформації немає, як було показано раніше.

Складно зробити висновок, чи навмисно прихована інформація, чи це помилка проектування інтерфейсу. На даний момент роз'яснень від представників Білайн я не отримав, тому вважаю неможливим порівнювати тарифи Білайн за відсутності офіційної інформації.

Мегафон для дзвінків до інших країн пропонує опцію «Дзвони в усі країни» За перші 30 днів стягується плата 60 €, потім щоденна плата 2 ? на день. Дзвінки до Італії, Іспанії, Кіпру та Греції коштують 6 ? на хвилину, а Туреччину 8 ? за хвилину.

Тарифи для мігрантів

У тарифах для мігрантів розглянуто ціни на країни СНД та найближчого зарубіжжя.

МТС в опції «Вигідні міжнародні дзвінки» надає дзвінки в СНД (крім Азербайджану та Білорусії) за ціною 15 ? за хвилину і в Азербайджан і Білорусь за ціною 20? за хвилину.

Білайн у тарифі «Ласкаво просимо» є спеціальні умови для Таджикистану. Для дзвінків на номери Білайн 1 хвилина - 7?, наступні хвилини по 1?. Для дзвінків на номери Білайн Вірменії, Казахстану, Киргизстану та на номери Київстар України – 2,5 ? за хвилину. Для дзвінків на інші номери Таджикистану, Вірменії, України, Казахстану, Киргизстану, а також будь-які номери Туркменістану - 7? за хвилину. Дзвінок в Азербайджан і Білорусь коштує 13? за хвилину. На номери Узбекистану Білайн-3? на хвилину, інші 4? за хвилину.

В опції «Дзвони у всі країни» дзвінки від Мегафон до Азербайджану та Білорусі стоять 15 ? за хвилину, в Україну - 10 ? за хвилину, Вірменію, Казахстан та Киргизстан - 8 ? на хвилину, в Таджикистан і Туркменістан - 6 ? на хвилину, в Узбекистан - 5? за хвилину. Також Мегафон має спеціальну опцію «Таджикистан+» для Таджикистану. Перша хвилина розмови коштує 7 €, до 20 хвилини хвилина коштує 1 €, а з 21 хвилини коштує 7 €.

Тарифи для бізнесменів

Бізнесмен може мати потребу спілкуватися з будь-якою країною. Метою огляду порівняти рівень цін для різних тарифів, а не створити повне порівняння цін по всіх країнах, тому вибрано 5 країн, куди міг би зателефонувати бізнесмен.

3. Німеччина

5. Великобританія

МТС в опції «Вигідні міжнародні дзвінки» надає дзвінки до Китаю по 1,5? на хвилину, США по 5? на хвилину, Німеччину та Великобританію по 10 ? на хвилину, в Японію по 25? за хвилину.

Тариф «Ласкаво просимо» у Білайн пропонує дзвінки до Китаю по 2 ? за хвилину.

Мегафон в опції «Дзвони у всі країни» надає дзвінки до Китаю по 1 ? на хвилину, США по 4? на хвилину, Німеччину по 6? на хвилину, Великобританію по 11? на хвилину, в Японію по 9? за хвилину.

Висновок

За розглянутими туристичними напрямками найвигіднішим є опція від Мегафон «Дзвони у всі країни». Даних щодо Білайн недостатньо.

За розглянутими напрямками для мігрантів ціни у Білайн і Мегафон конкурують, МТС коштує найдорожче.

За розглянутими напрямками для бізнесменів ціни у МТС та Мегафон конкурують, даних щодо Білайну недостатньо.

Роумінг

Багато операторів надають послуги роумінгу, коли є можливість виходити із SIM-карткою свого оператора до мережі іншого оператора. Існує міжміський та міжнародний роумінг. Міжміський роумінг може бути потрібним, якщо абонент їде в поїзді. Такий абонент може швидко змінювати положення на карті, тому він не може купувати для кожного пункту, через який їде, місцеву SIM-картку у місцевого оператора.

Міжнародний роумінг зазвичай дорожчий, ніж міжміський.

Для міжнародного роумінгу МТС пропонує послугу "Ноль без кордонів". Абонентська плата за цю послугу становить 60? на день. Для деяких напрямків вхідні дзвінки перші 10 хвилин можуть бути безкоштовні, але після витрати ліміту в 200 хвилин на місяць кожна вхідна хвилина буде коштувати по 25 ? за хвилину.

Для Греції, Німеччини та Туреччини вигідніше використовувати послугу «Вільна подорож». Абонентська плата складає 100? на день. Послуга пропонує 60 хвилин на день для вхідних та вихідних на російські номери.

Таблиця 9. Ціна на «Нуль без кордонів» за туристичними напрямками

Швидше за все, мігрантам не важко обзавестися місцевими тарифами, тому цей напрямок окремо по країнах СНД розглядатися не буде.

Для бізнесменів важливо завжди бути на зв'язку, на одному номері, тому вони навряд чи погодяться змінювати SIM-карту на місцеву.

Малюнок 13. Ціна на «Нуль без кордонів» за бізнесом напряму

Німеччина

Великобританія

Вхідні дзвінки (перші 10 хвилин), рублів за хвилину

Вхідні дзвінки (з 11 хвилини), рублів за хвилину

Вихідні дзвінки на російські номери (1 хвилина і починаючи з 6 хвилини), рублів за хвилину

Вихідні дзвінки на російські номери (з 2 по 5 хвилину), рублів за хвилину

Вихідні дзвінки на номери країни перебування, рублів за хвилину

Вихідні дзвінки на номери інших країн, рублів за хвилину

Для міжнародного роумінгу Білайн надає послугу "Моя планета". Вартість підключення послуги 25?. За всіма туристичними напрямками вхідні дзвінки коштують 15? за хвилину, що виходять у будь-які країни та всередині країни перебування 25 ? за хвилину. Такі ж ціни для найближчого зарубіжжя та зазначених раніше напрямків для бізнесу, за винятком Японії, для якої входять 19 ? за хвилину, а вихідні 49 за хвилину.

Для міжнародного роумінгу Мегафон надає дві опції: «Весь світ» та «Навколо світу». Весь світ пропонує 30 хвилин на день безкоштовних вхідних викликів при абонентській платі 39 ? в стукіт. «Навколо світла» підключається за 15? і має щоденну абонентську плату 9?. Вхідні та вихідні виклики по Європі та СНД, Туреччині, Абхазії та Південній Осетії стоять 6 ? за хвилину, для Японії 9? за хвилину, для США та Китаю 36 ? за хвилину. Для дзвінків до Росії Мегафон використовує Callback.

Висновок

Міжнародний роумінг, на відміну від інших тарифів, може мати платний вхідний виклик, ціни можуть досягати 200 ? за хвилину.

Огляд ринку VoIP зв'язку

Крім операторів стільникового зв'язку, існують оператори, що надають послуги Voice over IP (VoIP) телефонії. Основною відмінністю цього зв'язку є використання Інтернету для з'єднання абонентів. Деякі фірми пропонують різні послуги VoIP, часто зв'язок двох або більше абонентів однієї VoIP компанії через інтернет є безкоштовними. Такі послуги надаються продуктами Skype, Hangouts, Viber.

VoIP може пов'язувати не тільки через мережу інтернет, але й через мережу. Для цього використовують GSM-VoIP шлюзи. Для VoIP-сервера можна налаштувати Least Cost Routing – автоматичний вибір маршруту для дзвінка залежно від номера. Сервер сам обирає найвигідніший тариф для виходу в мережу, у зв'язку з чим ціна на зв'язок падає.

Ціни на VoIP можуть залежати від курсу валюти або вказуватися в іншій валюті, для порівняння всі ціни будуть переведені в рублі за курсом на 26.05.2015 вказані на сайті Центрального банку Російської Федерації.

Таблиця 10. Курс валют на 26.05.2015

Skype пропонує такі тарифи для дзвінків на номери стільникових телефонів Кіпру:

Таблиця 12. Ціни Skype на дзвінки до Кіпру

Skype пропонує такі тарифи для дзвінків на номери мобільних телефонів Туреччини:

Таблиця 13. Ціни Skype на дзвінки до Туреччини

Skype пропонує такі тарифи для дзвінків на номери стільникових телефонів та стаціонарних телефонів у США:

Таблиця 14. Ціни skype на дзвінки у США

Skype пропонує такі тарифи для дзвінків на номери мобільних телефонів до Японії:

Таблиця 15. Ціни skype на дзвінки до Японії

Skypeпропонує наступні тарифи для дзвінків на номери стільникових телефонів та стаціонарних телефонів до Китаю:

Таблиця 16. Ціни skype на дзвінки в Китай

За розглянутими тарифами на Skype можна зробити висновок, що вони можуть бути вигіднішими, ніж схожі тарифи у трійки лідерів стільникового зв'язку.

Viber

Viber Out пропонує такі ціни:

Таблиця 17. Розцінки на Viber Out

VoIP сервер можна поставити на звичайному комп'ютері, тому VoIP рішення часто використовуються всередині фірм для зв'язку з клієнтами або для мережного спілкування. Цей зв'язокможе контролювати системний адміністратор. Він може сам налаштувати захищеність зв'язку та запис розмов. Для сервера можна налаштувати DISA, щоб клієнти, що телефонують, могли в режимі DTMF вводити команди, які прийме віртуальна АТС. Також для такого сервера можна налаштувати шлюз, який дозволить дзвонити та приймати стільниковий сигнал.

Висновок

Використання VoIP може скоротити витрати на зв'язок, особливо там, де є безкоштовний та стабільний інтернет. З VoIP можна не дбати про роумінг. Тарифи на VoIP не такі складні, як у стільникових операторів.

Огляд функції телефонії callback

На практиці інтернет зв'язок має обмежену зону покриття, а сама послуга з надання інтернету коштує грошей. При цьому ціни на VoIP залишаються привабливими.

Якщо зв'язок через мережу інтернет є, але він нестабільний, то на допомогу приходить послуга Callback. На сервер VoIP відправляється номер, куди абонент хоче зателефонувати, а сервер вже телефонує абоненту по каналу стільникового зв'язку, після чого починає додзвонюватися до іншого абонента і з'єднує цих двох абонентів. Якщо немає можливості використовувати інтернет, можна надіслати SMS на номер VoIP сервера з номером абонента «B», якому телефонує абонент «A». Існують також SIM-карти, в які вшиті потрібні параметри для Callback телефонії. Ці оператори економлять кошти, використовуючи VoIP, тому їх тарифи дешевші.

Такі послуги надає МТС. До номера абонента додається код *137*, а наприкінці #. Після надсилання запиту йде вхідний дзвінок, якщо на нього відповісти, то почнеться з'єднання з надісланим у запиті абонентом. Вартість зворотного дзвінка залежить від країни перебування абонента.

Мегафон також надає такі послуги: зворотний дзвінок може відбутися при звичайному наборі номера, якщо підключено послугу «Навколо Світла» .

Існує ще один спосіб передати серверу номер абонента "B" від абонента "A" - за допомогою DTMF сигналу. Даний спосіб хороший тим, що будь-який сучасний телефон вміє генерувати DTMF сигнали, а виклик в багатьох операторів є безкоштовним.

Так як будь-який телефон з операційною системою Android вміє генерувати DTMF сигнали, цей спосіб є найбільш універсальним, він вимагає мінімального підключення додаткових послуг і не вимагає наявності SIM-карти. Саме такий спосіб можуть використовувати власники власних VoIP-серверів для зв'язку абонентів.

Аналіз програм, функціонал яких може бути використаний для полегшення використання функції Callback

Пряму реалізаціюпрограм для DTMF Callback без прив'язки до оператора важко знайти.

Існують реалізації функцій, які можуть бути корисними за допомогою DTMF Callback.

Однією з таких реалізацій найчастіше називають префіксер. Ці програми відловлюють вхідний або вихідний дзвінок і додають до нього так званий prefix або suffix, тобто доповнюють номер телефону до номера або після, виходить такий вид номера: prefix xxxxxxxxx suffix , де x - будь-який символ номера.

Завданням цих програм у реалізації Callback буде додавати DTMF сигнал після певної події.

Prefixer

Найбільш наближеним до розв'язання цієї задачі є Prefixer від компанії 253°Below. Ця програма містить правила, в яких можна налаштувати:

c. Розклад роботи програми

d. Номер, який записується в журнал дзвінків

e. Номери, на яких працюватиме правило

Як випливає з інтерфейсу програми, правила можна налаштувати як вхідних, так вихідних дзвінків. Тобто програма повинна додавати номер, коли надійшов вхідний дзвінок. Теоретично, якщо послати в suffix “,” для паузи або “;” для очікування гудку, можна послати в DISA номер.

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

Для вихідних дзвінків програма дійсно додає prefix і suffix, але для вхідних, всупереч налаштованим правилам, вона нічого не додає. Тобто її практично неможливо використовувати для DTMF Callback зв'язку, але можна використовувати реалізації Callback від МТС.

Існує спосіб набрати на клавіатурі певний символ чи групу символів. Найчастіше програми з таким функціоналом використовують для розширення функцій клавіатури або інтерфейсу управління Android. Щоб абонент не вводив повністю весь номер пам'яті, коли йому передзвонив сервер Callback, може скористатися емуляцією натискання номера. У даному випадкутелефон надішле DTMF сигнали, ніби користувач їх вводив сам. Існує досить велика кількість програм із цим функціоналом.

Gamekeyboard

Для тестування такої можливості була використана Gamekeyboard від компанії Locnet. Для використання програми потрібні root права. Ця програмамістить макроси, які можна записати які символи будуть вводитися з яким проміжком. Можна налаштувати розмір та положення на екрані віртуальної кнопки, яка активуватиме макрос. З телефону створювати макрос для цієї програми досить важко, тому сфера її застосування обмежується невеликою кількістю улюблених номерів. Ця програма підтримує профілі, тому теоретично можна розробити програму, яка створить макрос для набраного номера та зв'яже з кнопкою. Це рішеннядозволить абоненту не зберігати у пам'яті номер абонента та не набирати весь номер повністю. Однак додаткові дії від користувача потрібні.

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

Висновок

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

Технологічна частина

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

Основною мовою для написання користувацьких додатківпід Android є Java. Інтерфейс програмування (API) для роботи з функціями Androidпередбачає використання Java. Для створення програм, написаних на Java під Android, використовуються Build Tools із Android Software Sevelopment Kit (SDK). Існує спосіб написання додатків на C/C++ для забезпечення вищої швидкості роботи додатків. Для цього використовується Native Development Kit. Існує рішення для розробки під C# під назвою Xamarin, яке дозволяє створювати кросплатформні програми. Для розробки на Python під Android можна використовувати одне з кількох рішень, зазначених у таблиці:

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

Python for Android

Android scripting

Python on a chip

Фреймворк kivy дозволяє створювати кросплатформні програми. Його можна пов'язати з python для Android. Тоді стає можливим написання кросплатформових додатків, які запускатимуться на Android. Також існує спосіб використовувати обгортку для виклику Java класів з Android API під назвою PyJNIus.

Такі рішення як 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. Дана IDE базується на IntelliJ IDEA від JetBrains і включає ряд функцій:

· Скрипти Gradle для складання apk

· Складання варіантів та генерація безлічі apk

· Шаблони коду

· Редактор шарів (layouts)

· Підпис додатків

· Вбудована підтримка Google Cloud Platform та можливість інтеграції Google Cloud Messaging and App Engine

Android Studio дозволяє паралельно встановлювати зібрані програми на кілька пристроїв, підключених по adb.

Android Studio підтримує роботу із системами контролю версій.

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

· Автозавершення слів

· підказка про помилки в коді

· підсвічування синтаксису java та xml файлів

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

· Виділення сірим кольором змінних, які не були використані

· Коментування рядків коду

· Стрибки по різних файлах проекту в пошуках виділеного слова

Android Studio є потужним інструментом, який рекомендується використовувати при розробці під Android, тому було ухвалено рішення використовувати її у розробці.

телефонія callback android програмування

Огляд мови програмування Python

Python є мовою високого рівня, яка поєднує кілька парадигм програмування, такі як:

· Об'єктне орієнтоване програмування. У python все є об'єктами: рядки, класи, числа і т.д. Якщо, скажімо, взяти число «1» і скласти з ним число «2»:

то насправді буде викликаний метод __add__ у об'єкта 1, який отримає тип Integer, тому наступний запис дасть такий самий результат:

· Динамічна типізація. Тип задається автоматично під час виконання програми. Плюсом даного виду типізації є легкість написання програм та швидке освоєння програмістом даного методу. У python можна самому вказати тип. За допомогою функції type можна дізнатися тип об'єкта. За допомогою функції «int» та «float» можна змінити тип. Так можна число 1 уявити рядком зі значенням 1 або числом плаваючою комою. Приклад:

>>> b = str(1)

>>> c = float(1)

Якщо перевірити тип змінних, то "a" буде "int", у "b" буде "str", а у "c" буде "float"

>>> print type(a)

>>> print type(b)

>>> print type(c)

· Сувора типізація. Python прийнято відносити до строго типізованих об'єктних мов.

· Функціональне програмування. У python можна використовувати рекурсії, ліниві обчислення та функції вищих порядків

· Імперативне програмування. Python підтримує процедурний метод програмування, у python можна використовувати модулі.

Python вважається достатньо простою мовоювін є найпопулярнішою мовою для вивчення в коледжах США.

Код python виконується рядково, тому часто помилку в коді можна помітити тільки після виконання цього рядка. Програми, створені за допомогою python for android, запускаються досить довго.

Для запуску такої програми, технічним засобом має бути пристрій зв'язку з такими характеристиками:

· На пристрої в внутрішньої пам'ятімає бути 10мб вільної пам'ятідля встановлення програми та зберігання його даних.

· Пристрій повинен мати наступне:

a. Android 2.2 і вище

b. OpenGL ES 2.0

Вимоги до внутрішньої пам'яті обумовлені тим, що встановлений додаток буде містити 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 може посилатися об'єкт будь-якого іншого класу» .

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

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

Розробка інтерфейсу для спрощеного використання функції телефонії 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, були розроблені мінімальні вимоги до прототипу:

1. Прототип повинен запускатися на всіх сучасних пристроях під Android, починаючи від Android 2.1 і закінчуючи Android 5.1.

2. Прототип повинен запитати набір номера абонента, коли передзвонить сервер телефонії

3. При дзвінку на номер абонента через прототип дзвінок повинен ініціюватися на номер сервера телефонії та одночасно запам'ятовувати номер, куди телефонував

Ініціалізація виклику на вказаний номер

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

Вирішили писати мовою програмування python, тому що у мене є досвід написання цією мовою . Для реалізації потрібно підключити 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();

startActivity(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 – це номер, куди зателефонує телефон. Якщо прописати команду

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

При цьому дзвінка не буде, тому що не буде привілеїв зателефонувати на такий номер. Залежно від потреби різні програми можуть використовувати різні дії. Якщо екстрених дзвінків не передбачається, то використовуватиметься саме ACTION_CALL. Це частіший випадок для дзвінків із браузера або програми з контактним номером.

На деяких прошивках як контактна книга може використовуватися альтернативний додаток. Сам вихідний код цієї програми може бути закритим. Якщо в таких програмах дзвінок ініціюється якось інакше, то вгадати, через який Intent ініціюється дзвінок, може бути важко. У такому разі можна поставити альтернативну контактну книгу з Google Playчи інших довірених джерел.

Щоб програма перехопила неявний Намір, треба в AndroidManifest.xml додати intent-filter:

Так як з контактної книги потрібно взяти лише номер у scheme вказується "tel".

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

Щоб додаток міг використовувати номер, який був у «tel», треба в потрібному нам класі скористатися методом getData():

Плаваюче віконце з кнопкою

Існує бібліотека під назвою StandOut за допомогою якої можна створити плаваюче вікно . Бібліотека маємо відкритий вихідний код та приклади. Ця бібліотека поширюється під вільною ліцензією MIT. Ця ліцензія дозволяє вільно розповсюджувати програмне забезпечення, яке містить цю бібліотеку. Бібліотека постачається так, відповідальність за шкоду, яку вона може завдати, автори не несуть.

Особливості цієї бібліотеки:

· Надання свого власного VIEW. Легка інтеграція.

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

1. заголовок плаваючого вікна

2. кнопка, яка згортає плаваюче вікно

3. кнопка, яка закриває плаваюче вікно

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

· Згорнуте вікно можна відновити

· Створення вікон різних типів

· Вікна можна переміщати

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

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

Public class FloatingButton extends StandOutWindow (

public void createAndAttachView(int id, FrameLayout frame) (

LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);

View view = inflater.inflate(R.layout.floating_button, frame, true);

А в res/layouts шар із описом інтерфейсу цього вікна floating_button.xml.

Кнопка для плаваючого вікна

Подібні документи

    Архітектура та історія створення операційної системи Android. Мова програмування Java. Вибір засобу для реалізації Android програми. Програмна реалізація Android програми. Проведення тестування розробленого програмного забезпечення.

    курсова робота , доданий 18.01.2017

    Огляд мобільної ОС Android. Вибір інструментів та технологій. Проектування прототипу графічного інтерфейсу. Характеристика та опис інтерфейсу користувача. Проектування та розробка бази даних. Визначення списку необхідних дозволів.

    курсова робота , доданий 13.09.2017

    Огляд існуючих програм для перегляду погоди на ОС Android. Операційні системи сучасних смартфонів. Ключові особливості Android, Java технологія. Розробка програмної частини, вибір мови, опис алгоритму, її логічної структури.

    курсова робота , доданий 16.04.2014

    Реалізація телефонного зв'язку по IP-мережі за допомогою набору протоколів та обладнання. Розробка підсистеми динамічної маршрутизації дзвінків для системи білінгу та менеджменту у мережі IP-телефонії. Основні вимоги до графічного інтерфейсу користувача

    дипломна робота , доданий 08.11.2015

    Розробка програм для смартфонів на ОС Android для мережі аптек "Фармація". Архітектура операційної системи Android. Архітектура та реалізація програми. Його функціональність. Опис роботи мобільного додатку. Розрахунок витрат за виробництво продукту.

    дипломна робота , доданий 17.06.2017

    Характеристика роботи операційної системи Android, яка використовується для мобільних телефонів. Створення Android проекту у середу розробки Eclipse. Загальна структура та функції файлу маніфест. Компоненти Android програми. Способи здійснення розмітки.

    курсова робота , доданий 15.11.2012

    Загальна схема роботи програми Android. Розробка навчальної програми для операційної системи Android, призначення якого - розвиток мови за допомогою вимовлення скоромовок. Опис компонентів розробленої програми, його тестування.

    дипломна робота , доданий 04.02.2016

    Основні поняття IP телефонії та види будови мереж IP телефонії. Голосові шлюзи Cisco для IP-телефонії. IP IVR як автоматична відповідь на дзвінки. Переваги побудови розподіленого контакту Центру, архітектура його побудови.

    дипломна робота , доданий 21.04.2016

    Загальні характеристики ОС Android. Розробка програми на основі створення менеджера файлів. Отримання за допомогою програми доступу до файлів, що зберігаються в " хмарному сховищів мережі Інтернет. Розрахунок вартості програмного забезпечення.

    дипломна робота , доданий 03.04.2015

    Розробка програмного забезпечення для платформи Androidверсії 2.3: інформаційні програми для шанувальників футбольної команди, з можливістю перегляду подій, статистики та іншої інформації про команду та її успіхи. Лістинг JsonDataManager.java.