Decodificarea semnalului dtmf în Android. Dezvoltarea unui prototip funcțional al unei aplicații care va facilita utilizarea funcției de telefonie DTMF Callback pe dispozitivele Android. o Abilitatea de a adăuga informații în istoricul apelurilor de sistem

Trimiteți-vă munca bună în baza de cunoștințe este simplu. Utilizați formularul de mai jos

Studenții, studenții absolvenți, tinerii oameni de știință care folosesc baza de cunoștințe în studiile și munca lor vă vor fi foarte recunoscători.

postat pe http://www.allbest.ru/

Introducere

Dezvoltarea progresului științific și tehnologic în lume a contribuit la răspândirea rapidă pe scară largă a comunicațiilor celulare la începutul secolului al XXI-lea, acest lucru se datorează nevoii de a fi în mod constant în domeniul accesului, în locurile în care comunicarea prin telefon fix este imposibilă. .

Datorită tendinței de scădere a prețurilor de pe piață, aproape fiecare cetățean al Rusiei are acces la propriul telefon mobil personal.

Mulți operatori de telecomunicații oferă servicii celulare. Datorită dezvoltării tehnologiilor Internet, telefonia IP a câștigat popularitate, ceea ce are o serie de avantaje față de telefonia celulară convențională, de exemplu, o conversație protejată de interceptarea sau înregistrarea unei conversații pe un server, utilizarea numerelor scurte și comunicarea fără implicarea furnizorilor.

Există mai multe moduri de a comunica între un server VoIP și un telefon mobil. Una dintre cele mai evidente este conexiunea la Internet, pentru care de obicei trebuie să plătiți un operator de telefonie celulară, care nu este deosebit de profitabilă pentru a face comunicarea prin Internet pentru VoIP mai ieftină decât propriile servicii de telefonie. Prin urmare, prețurile pentru un tarif cu Internet stabil, necesar pentru apelurile prin telefonie IP, pot fi umflate.

Există o modalitate de a comunica cu un server VoIP, care se numește de obicei callback, atunci când serverului i se spune ce număr să sune, iar serverul îl sună pe abonat înapoi, conectându-se la numărul la care sună abonatul. Acest număr poate fi transmis prin Internet, SMS sau apelare ton (DTMF).

Nu este întotdeauna posibil să trimiteți SMS-uri sau să utilizați Internetul, mai ales dacă abonatul este în roaming. Adesea, singura metodă de comunicare disponibilă este apelul celular „tradițional”. Există o modalitate prin care puteți comunica cu serverul VoIP printr-un apel celular; pentru aceasta, se utilizează DTMF Callback folosind următorul algoritm:

1. Abonatul „A” apelează numărul serverului de telefonie

Figura 1. Pasul 1

2. Serverul de telefonie se deconectează

Figura 2. Pasul 2

3. Serverul de telefonie sună înapoi la abonatul „A” și așteaptă un răspuns

Figura 3. Pasul 3

4. Abonatul „A” răspunde la apel

Figura 4. Pasul 4

5. În apelarea cu tonuri, abonatul „A” formează numărul abonatului „B”

Figura 5. Pasul 5

6. Serverul inițiază un apel către abonatul „B”

Figura 6. Pasul 6

7. După inițializare, serverul asociază conexiunea abonatului „A” și abonatului „B”. Abonatul „A” aude deja tonul de apel către abonatul „B”.

Figura 7. Pasul 7

Abonatul „B” răspunde la apel. Ambii utilizatori pot face schimb de mesaje vocale.

Figura 8. Pasul 8

Ca rezultat, abonatul „A” și abonatul „B” au un apel de intrare și pot comunica între ei prin serverul de telefonie.

Există o metodă Callthrough, care, spre deosebire de Callback, nu necesită ca serverul să apeleze înapoi abonatul „A”, dar în legătură cu aceasta, abonatul „A” plătește pentru apelul de ieșire.

Baza dezvoltării

Principalul dezavantaj al inițializării callback folosind DTMF este că abonatul „A” trebuie să formeze manual numărul abonatului „B” după ce serverul l-a sunat înapoi. În jurnalul de apeluri de pe telefonul abonatului „A”, numărul pe care l-a format, adică numărul serverului, rămâne în apelurile efectuate, iar numărul de apel invers care l-a sunat înapoi rămâne în apelurile primite. Aceste informații nu sunt foarte informative pentru utilizator. Serverul de telefonie poate fi configurat astfel încât să apeleze înapoi la abonatul „A” de la numere diferite. Aceasta înseamnă că utilizatorul va avea un număr mare de numere necunoscute în jurnalul de apeluri. Aceste informații nu sunt necesare și ar trebui să fie ascunse abonatului. Adesea, serviciile de apel invers nu au acces direct prin DTMF, ci folosesc o conexiune la Internet, SMS sau o cartelă SIM specială.

Scopul dezvoltării

Dezvoltați un prototip funcțional al unei aplicații care va facilita utilizarea funcției de apel invers DTMF pe dispozitivele Android.

Revizuire și parte analitică

celular

Comunicațiile celulare sunt comunicații fără fir ale căror zone de acces sunt împărțite în celule hexagonale asemănătoare fagurilor. O astfel de zonă de acces este asigurată de stația de bază. Un set de astfel de stații de bază care formează zone de celule se numește rețea celulară; dispozitivele care utilizează rețeaua celulară sunt telefoanele mobile. Într-o rețea celulară, fiecare celulă utilizează un set diferit de frecvențe față de celulele învecinate pentru a evita interferențele și pentru a asigura debitul garantat pentru fiecare celulă.

Caracteristicile rețelei celulare:

· Utilizarea mai multor stații de bază oferă mai multe opțiuni decât utilizarea unui transmițător mare. Fiecărei celule i se pot atribui mai multe frecvențe corespunzătoare stației de bază. Un grup de frecvențe poate fi reutilizat dacă celulele învecinate folosesc frecvențe diferite.

Figura 9. Schema de reutilizare a frecvenței (F1-F4 - frecvențe)

· Dispozitivele mobile alocă mai puțină energie pentru a comunica cu turnul, așadar cum este necesar un semnal mai puțin puternic pentru a-l găsi datorită locației mai apropiate a turnului de comunicații

· Arie de acoperire mai mare decât un singur transmițător terestru, astfel încât turnuri celulare suplimentare pot fi adăugate în zonele cu comunicație slabă unde semnalul nu ajunge bine din cauza interferențelor.

La aranjarea celulelor, este optim să se evite suprapunerea suprafețelor celulare; nu ar trebui să existe spațiu gol între celule. Prin urmare, forma geometrică a acoperirii poate fi figuri precum triunghiuri, pătrate sau hexagoane. Forma acoperirii antenei este cel mai asemănătoare cu cea a unui hexagon.

Dispozitivele care gestionează și direcționează semnalele de la un telefon mobil la altul se numesc centrale telefonice automate (PBX). În prezent, aproape toate centralele telefonice automate sunt electronice.

Dialerul este o parte a interfeței telefonice care vă permite să transmiteți numărul telefonului la care ar trebui să se conecteze PBX-ul. Multă vreme s-au folosit dialere de impulsuri, care generau impulsuri, unde fiecare cifră corespundea propriului număr de impulsuri.Aparatul telefonic avea un disc cu 10 găuri.Principiul conectării la un PBX era următorul:

Pe telefon, un disc este rotit din punctul cu numărul indicat, care înfășoară arcul. Când discul este eliberat, arcul începe să se îndoiască, iar discul începe să se miște în direcția opusă. Apelarea unui impuls corespunde închiderii și deschiderii liniei telefonice. Se fac pauze între seturi de impulsuri pentru a distinge setul unui caracter de altul. Această metodă de apelare este destul de incomodă; abonatul trebuie să scoată discul de mai multe ori și să aștepte până când se întoarce la locul său. Ulterior, a apărut un cadran cu buton de apăsare a pulsului, care a eliminat acest dezavantaj.

În acest moment, un semnal cu două tonuri cu mai multe frecvențe (Dual Tone Multi-Frequency, DTMF) este utilizat pentru a forma un număr. DTMF poate fi utilizat pentru comenzile rețelei telefonice interne. În DTMF, cifra transmisă este codificată de un semnal obținut prin însumarea a două tensiuni sinusoidale de o anumită frecvență. În fiecare grup sunt utilizate două grupuri de patru frecvențe audio.

Tabelul 1. Corespondența frecvențelor și simbolurilor pentru apelarea DTMF

Accesul Direct Inward System (DISA) este o funcție de acces direct care permite unui abonat să obțină acces pentru a controla o centrală telefonică sau un server de telefonie folosind semnale DTMF de la telefon.

Prezentare generală a pieței celulare

Veniturile companiilor care furnizează comunicații celulare în Rusia sunt în creștere, așa cum demonstrează rapoartele lor.Aceleași rapoarte arată că o mare parte a veniturilor provine din comunicațiile mobile. Este în interesul atât al utilizatorului privat mediu, cât și al jucătorului corporativ să reducă costurile de comunicații mobile. O modalitate este de a analiza serviciile utilizate pe lună și de a selecta cel mai potrivit tarif de la un operator de telefonie mobilă.

Piața de comunicații mobile din Moscova este formată din trei jucători, a căror distribuție poate fi văzută la:

Diagrama 1: distribuția jucătorilor importanți de pe piața celulară

Comparaţie tarifele locale la Moscova

Trei jucători importanți de pe piața de la Moscova au tarife de pachete similare care pot fi comparate. De exemplu, tarifele de clasă „Smart” pentru MTS, „All Inclusive” pentru Megafon și „Everything for” pentru Beeline. Aceste tarife oferă un pachet de opțiuni și o taxă de abonament pentru ele. Să comparăm tarifele cu preț similar din aceste clase. Pachetele de servicii pot include SMS, MMS, Internet și alte servicii, dar în această analiză nu sunt luate în considerare, întrucât ne interesează prețul apelului. Din același motiv, nu există o descriere detaliată a nuanțelor tarifelor dacă acestea nu afectează în mod direct prețul, cu toate acestea, se poate observa că calitatea comunicării în diferite zone ale zonei poate varia foarte mult între operatori. De asemenea, nu este necesar să se calculeze costul apelurilor dacă se depășește limita tarifară lunară, deoarece o persoană care controlează costurile va alege corect tariful, cu toate acestea, este de remarcat faptul că prețul după depășirea limitei poate fi destul de mare. Este de remarcat faptul că apelurile primite în Rusia sunt gratuite pentru toate cele trei grupuri de pachete.

Prețul minim este tarifele pachetului „Smart mini” - 200?, „All inclusive XS” - 199? și „Toate pentru 200” - 200?. Există câteva funcții pentru apeluri în rețeaua operatorului. „Smart mini” și „All inclusive XS” efectuează apeluri în toată Rusia, iar „All for 200” doar în Moscova și regiunea Moscovei. Preturile sunt indicate incepand cu 15 mai 2015.

Tabelul 3. Tarife minime pentru pachete

După cum se poate observa din tabel, opțiunile tarifare sunt foarte asemănătoare. Apelurile în rețea sunt cele mai ieftine. Este mai scump pentru abonații altor operatori să sune, mai ales în afara regiunii Moscova.

Deși acest tarif nu este destinat apelurilor către alte țări, este posibil ca o persoană să fie nevoie să sune în afara propriei țări, așa că merită să luați în considerare tarifele internaționale pentru apelurile către alte țări.

Tabel 4. Tarife minime pentru pachete (apeluri în străinătate)

CIS, ruble pe minut

24 De asemenea pentru Republica Crimeea și orașul Sevastopol

Europa, ruble pe minut

Alte țări, ruble pe minut

SUA, ruble pe minut

Canada, ruble pe minut

Australia și Oceania, ruble pe minut

Asia, ruble pe minut

CSI în cadrul rețelei, ruble pe minut

America de Nord și Centrală (cu excepția SUA și Canada), ruble pe minut

După cum se vede din tabel, tarife pt apelurile către alte țări sunt deja destul de diferite. Beeline oferă posibilitatea de a apela numerele Beeline din alte țări la un preț mic. Megafon are mai multe diferențe de preț pentru diferite țări, în timp ce MTS, dimpotrivă, are un preț unic pentru Europa și un preț unic pentru toate celelalte țări.

Tabelul 5. Tarife pachete mici

La fel ca și în cazul tarifelor minime de pachet, condițiile sunt foarte asemănătoare, dar prețul diferă.

Prețurile MTS pentru apelurile către alte țări pentru pachetele „Smart” nu sunt diferite, la fel ca și Megafon pentru pachetele „All Inclusive”, dar pachetele „All for” de la Beeline au prețuri ușor diferite în străinătate:

· În tariful „Totul pentru 400”: condițiile „Totul pentru 200” + primele 10 minute pe zi costă 5?, dacă suni în țările CSI, Crimeea și Sevastopol.

· În tariful „Totul pentru 600”: condițiile „Totul pentru 400” + primele 10 minute pe zi costă 7?, dacă suni în Azerbaidjan, Belarus și Moldova

· În tariful „Totul pentru 900”: condiții „Totul pentru 600” + primele 10 minute pe zi costă 5?, dacă suni în Europa, SUA și Moldova

· În tariful „Totul pentru 1500”: condiții „Totul pentru 900” + către Maldive, Madagascar, Burundi, Coreea de Nord, Papua Noua Guinee, Seychelles, Somalia, Tokelau, Tunisia, un minut costă 55?

Tabelul 6. Tarifele medii ale pachetelor

Cu tarife locale egale, prețul Megafon pentru apelurile către alți operatori din Rusia este de 3,3 ori mai ieftin.

Tabel 7. Pachete tarifare peste medie

Cu tarife locale egale, prețul apelurilor către alți operatori din Rusia de la MTS este de 3,3 ori mai ieftin.

Tabel 8. Pachete mari tarifare

Aceste tarife locale au aproape aceleași condiții.

Concluzie

Tarifele pachetelor sunt foarte favorabile dacă le folosiți pentru apeluri în rețea. Operatorii concurenți mențin prețurile aproximativ la același nivel. Pentru un abonat obișnuit care vorbește 20-60 de minute pe zi, aceste tarife sunt potrivite. Dacă o persoană trebuie să vorbească mai mult de 120 de minute pe zi, atunci va trebui să ia pachete tarifare mai scumpe, de la 1500 la 2500, ceea ce este deja destul de scump.

Roamingul internațional are propriile condiții care diferă unele de altele. Acest roaming este costisitor pentru toți cei trei operatori; o conversație de treizeci de minute poate depăși costul pachetului de servicii. Dacă abonatul trebuie să sune în alte țări, atunci merită să alegeți un alt tarif.

Tarife pentru apeluri către alte țări

Tarifele pentru apelurile către alte țări au fost împărțite în trei grupuri:

1. Tarife pentru rudele si prietenii turistilor

2. Tarife pentru migranți

3. Tarife pentru oamenii de afaceri

Tarife pentru rudele și prietenii turiștilor

Pentru a compara tarifele pentru rudele și prietenii turiștilor, au fost luate cinci destinații populare de stațiune::

1. Spania

Apelurile către astfel de direcții sunt luate în considerare numai atunci când apelează la un telefon mobil, deoarece este puțin probabil ca un turist să stea lângă un telefon fix pentru întreaga călătorie.

MTS are o opțiune tarifară „Apeluri internaționale profitabile”. Taxa lunară de abonament este de 50?. Apelurile către aceste cinci direcții vor costa 10 ruble pe minut. Opțiunea tarifară este compatibilă cu alte tarife, de exemplu, „Smart”.

Beeline are un tarif „Bun venit”. Costul trecerii la acest tarif este de 150?, nu există taxă lunară de abonament pentru tarif, dar există o taxă zilnică de 4,45? pentru optiunile incluse in tarif. Costul apelurilor către Turcia este de 6? Intr-un minut. Din păcate, nu există informații despre alte dintre cele cinci țări turistice. Pe pagina de tarif urmand link-ul:

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

Figura 10. Captură de ecran a zonei din pagina de tarife „Bun venit” Beeline

O tranziție care redirecționează către adresa:

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

Interfața paginii conține trei hyperlinkuri.

Figura 11. Interfața paginii „Roaming, comunicații pe distanțe lungi și internaționale”.

„Roaming când călătorești în jurul lumii”, „Roaming când călătorești în jurul Rusiei” și „Apeluri de acasă în alte orașe și țări”. Evident, prețurile pentru apelurile către alte țări ar trebui să fie pe al treilea hyperlink. Pagina de la acest link oferă o interfață pentru a solicita informații serverului Beeline.

Figura 12. Captură de ecran din pagina „Apeluri de acasă către alte orașe și țări” după solicitarea „Cipru” cu tariful „Bun venit”

Dacă verificați prețul, de exemplu, pentru Cipru, atunci în loc de prețurile pentru Cipru, vor fi indicate condițiile generale ale tarifelor. Nu vor exista condiții specifice pentru Cipru. În secțiunea „Apeluri către alte țări” există un hyperlink numit „Conform tarifelor de comunicații internaționale” cu adresa:

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

Pentru care aceste informații nu sunt disponibile, așa cum sa arătat mai devreme.

Este dificil de concluzionat dacă informațiile sunt ascunse în mod intenționat sau dacă aceasta este o eroare de proiectare a interfeței. Deocamdată nu am primit nicio explicație sănătoasă de la reprezentanții Beeline, așa că consider imposibil să compar tarifele Beeline în lipsa unor informații oficiale.

Pentru apelurile către alte țări, Megafon oferă opțiunea „Apel în toate țările”.Pentru primele 30 de zile se percepe o taxă de 60?, apoi o taxă zilnică de 2? într-o zi. Apelurile către Italia, Spania, Cipru și Grecia costă 6? pe minut, iar la Turcia 8? Intr-un minut.

Tarife pentru migranți

Tarifele pentru migranți iau în considerare prețurile pentru țările CSI și țările vecine.

MTS în opțiunea „Apeluri internaționale profitabile” oferă apeluri către CSI (cu excepția Azerbaidjanului și Belarusului) la un preț de 15? pe minut si in Azerbaidjan si Belarus la pretul de 20? Intr-un minut.

Beeline are condiții speciale pentru Tadjikistan în tariful său „Bun venit”. Pentru apelurile către numerele Beeline 1 minut - 7?, minutele ulterioare 1?. Pentru apeluri către numerele Beeline din Armenia, Kazahstan, Kârgâzstan și către numerele Kyivstar din Ucraina - 2,5 ? Intr-un minut. Pentru apeluri către alte numere din Tadjikistan, Armenia, Ucraina, Kazahstan, Kârgâzstan, precum și orice numere din Turkmenistan - 7? Intr-un minut. Un apel către Azerbaidjan și Belarus costă 13? Intr-un minut. În Uzbekistan Beeline - 3 numere? pe minut, restul de 4? Intr-un minut.

În opțiunea „Apelați toate țările”, apelurile din Megafon către Azerbaidjan și Belarus costă 15? pe minut, în Ucraina - 10? pe minut, Armenia, Kazahstan și Kârgâzstan - 8? pe minut, către Tadjikistan și Turkmenistan - 6? pe minut, în Uzbekistan - 5? Intr-un minut. Megafon are, de asemenea, o opțiune specială „Tadjikistan+” pentru Tadjikistan. Primul minut de conversație costă 7?, până în al 20-lea minut un minut costă 1?, iar din 21 de minute costă 7?.

Tarife pentru oamenii de afaceri

Un om de afaceri poate avea nevoie să comunice cu oricare dintre țări. Scopul acestei revizuiri este de a compara nivelul prețurilor pentru diferite tarife, și nu de a crea o comparație completă a prețurilor pentru toate țările, astfel încât au fost selectate 5 țări unde un om de afaceri ar putea apela.

3. Germania

5. Marea Britanie

MTS în opțiunea „Apeluri internaționale benefice” oferă apeluri către China la 1,5? pe minut, US 5? pe minut, Germania si Marea Britanie 10? pe minut, în Japonia pentru 25? Intr-un minut.

Tariful „Bun venit” al lui Beeline oferă apeluri către China pentru 2? Intr-un minut.

Megafon în opțiunea „Apelați toate țările” oferă apeluri către China pentru 1? pe minut, US 4? pe minut, Germania la 6? pe minut, Marea Britanie la 11? pe minut, în Japonia la 9? Intr-un minut.

Concluzie

Pentru destinațiile turistice considerate, cea mai profitabilă opțiune este opțiunea „Apel în toate țările” Megafon. Nu există suficiente date despre Beeline.

În zonele considerate pentru migranți, prețurile Beeline și Megafon concurează; MTS este cel mai scump.

În zonele luate în considerare pentru oamenii de afaceri, prețurile de la MTS și Megafon concurează; nu există date suficiente pentru Beeline.

Roaming

Mulți operatori oferă servicii de roaming, unde este posibil să utilizați cartela SIM a operatorului dvs. pentru a vă conecta la rețeaua altui operator. Există roaming pe distanțe lungi și internațional. Roamingul pe distanțe lungi poate fi necesar dacă abonatul călătorește cu un tren. Un astfel de abonat își poate schimba rapid poziția pe hartă, așa că nu poate achiziționa o cartelă SIM locală de la un operator local pentru fiecare punct prin care călătorește.

Roamingul internațional este de obicei mai scump decât roamingul pe distanțe lungi.

Pentru roaming internațional, MTS oferă serviciul „Zero fără frontiere”. Taxa de abonament pentru acest serviciu este de 60? într-o zi. Pentru unele destinații, apelurile primite pentru primele 10 minute pot fi gratuite, dar după utilizarea limitei de 200 de minute pe lună, fiecare minut primit va costa 25? Intr-un minut.

Pentru Grecia, Germania și Turcia, va fi mai profitabil să folosești serviciul „Free Travel”. Taxa de abonament este 100? într-o zi. Serviciul oferă 60 de minute pe zi pentru apelurile primite și efectuate către numerele rusești.

Tabel 9. Preț pentru „Zero fără frontiere” pe destinație turistică

Cel mai probabil, migranților nu le va fi dificil să obțină tarife locale, așa că această zonă nu va fi luată în considerare separat pentru țările CSI.

Pentru oamenii de afaceri, este important să fie mereu în contact, la același număr, așa că este puțin probabil să fie de acord să schimbe cartela SIM cu una locală.

Figura 13. Prețul pentru „Zero fără frontiere” în funcție de direcția de afaceri

Germania

Marea Britanie

Apeluri primite (primele 10 minute), ruble pe minut

Apeluri primite (de la 11 minute), ruble pe minut

Apeluri efectuate către numere rusești (1 minut și începând de la 6 minute), ruble pe minut

Apeluri efectuate către numere rusești (de la 2 la 5 minute), ruble pe minut

Apeluri efectuate către numerele țării gazdă, ruble pe minut

Apeluri efectuate către numere din alte țări, ruble pe minut

Pentru roaming internațional, Beeline oferă serviciul „Planeta mea”. Costul conectării la serviciu este de 25?. Pentru toate destinațiile turistice, apelurile primite costă 15? pe minut, plecare în orice țară și în țara gazdă 25? Intr-un minut. Aceleași prețuri pentru țările vecine și direcțiile de afaceri indicate anterior, cu excepția Japoniei, pentru care intră 19? pe minut și 49 de ieșire pe minut.

Pentru roamingul internațional, Megafon oferă două opțiuni: „Întreaga lume” și „În jurul lumii”. „The whole world” oferă 30 de minute pe zi de apeluri gratuite primite cu o taxă de abonament de 39? la lovituri. „În jurul lumii” se conectează pentru 15? și are o taxă zilnică de abonament de 9?. Apelurile primite și efectuate în Europa și CSI, Turcia, Abhazia și Osetia de Sud costă 6? pe minut, pentru Japonia 9? pe minut, pentru SUA și China 36? Intr-un minut. Megafon folosește Callback pentru apelurile către Rusia.

Concluzie

Roamingul internațional, spre deosebire de alte tarife, poate avea un apel de intrare plătit, prețurile pot ajunge la 200? Intr-un minut.

Analiza pieței comunicații VoIP

Pe lângă operatorii de telefonie mobilă, există operatori care oferă servicii de telefonie Voice over IP (VoIP). Principala diferență a acestei conexiuni este utilizarea Internetului pentru conectarea abonaților. Unele companii oferă diverse servicii VoIP, adesea conectarea a doi sau mai mulți abonați ai unei companii VoIP prin Internet este gratuită. Astfel de servicii sunt furnizate de produse Skype, Hangouts, Viber.

VoIP poate comunica nu numai prin Internet, ci și prin intermediul unei rețele celulare. Pentru aceasta sunt folosite gateway-uri GSM-VoIP. Pentru serverul VoIP, puteți configura Least Cost Routing - selectarea automată a unei rute pentru un apel în funcție de număr. Serverul însuși alege cel mai favorabil tarif pentru accesarea rețelei și, prin urmare, costul comunicației scade.

Prețurile pentru VoIP pot depinde de cursul de schimb sau pot fi indicate într-o altă monedă; pentru comparație, toate prețurile vor fi convertite în ruble la cursul de schimb din 26 mai 2015 indicat pe site-ul Băncii Centrale a Federației Ruse. tarif pentru această dată:

Tabelul 10. Cursurile valutare din 26 mai 2015

Skype oferă următoarele tarife pentru apelurile către numerele de telefon mobil din Cipru:

Tabelul 12. Prețuri Skype pentru apelurile către Cipru

Skype oferă următoarele tarife pentru apelurile către numerele de telefon mobil turcești:

Tabelul 13. Prețuri Skype pentru apelurile către Turcia

Skype oferă următoarele tarife pentru apeluri la telefoane mobile și fixe din SUA:

Tabelul 14. Prețuri Skype pentru apelurile către SUA

Skype oferă următoarele tarife pentru apelurile către numerele de telefon mobil din Japonia:

Tabelul 15. Prețuri Skype pentru apelurile către Japonia

Skype oferă următoarele tarife pentru apelurile către telefoane mobile și fixe din China:

Tabelul 16. Prețuri Skype pentru apelurile către China

Pe baza tarifelor Skype revizuite, putem concluziona că acestea pot fi mai profitabile decât tarifele similare din primele trei rețele celulare.

Viber

Viber Out oferă următoarele tarife:

Tabelul 17. Prețuri Viber Out

Un server VoIP poate fi instalat pe un computer obișnuit, astfel încât soluțiile VoIP sunt adesea folosite în cadrul companiilor pentru a comunica cu clienții sau pentru comunicarea intranet. Această conexiune poate fi controlată de administratorul de sistem. El poate configura securitatea comunicațiilor și poate înregistra el însuși conversațiile. Puteți configura DISA pentru server, astfel încât clienții care apelează să poată introduce comenzi în modul DTMF pe care PBX-ul virtual le va accepta. De asemenea, puteți configura un gateway pentru un astfel de server, care vă va permite să efectuați apeluri și să primiți un semnal celular.

Concluzie

Utilizarea VoIP poate reduce costurile de comunicare, mai ales acolo unde există internet gratuit și stabil. Cu VoIP nu trebuie să vă faceți griji cu privire la roaming. Tarifele VoIP nu sunt la fel de complexe ca cele ale operatorilor de telefonie celulară.

Prezentare generală a funcției de apelare telefonică

În practică, comunicațiile prin Internet au o zonă de acoperire limitată, iar serviciul de Internet în sine costă bani. În același timp, prețurile pentru VoIP rămân atractive.

Dacă există o conexiune prin Internet, dar este instabilă, atunci serviciul de apel invers vine în ajutor. Numărul la care abonatul dorește să apeleze este trimis către serverul VoIP, iar serverul îl sună pe abonat înapoi printr-un canal celular, după care începe să sune pe celălalt abonat și conectează acești doi abonați. Dacă nu este posibil să utilizați Internetul, puteți trimite un SMS la numărul serverului VoIP cu numărul abonatului „B”, care este apelat de abonatul „A”. Există și carduri SIM care au încorporați parametrii necesari pentru telefonia Callback. Acești operatori economisesc bani utilizând VoIP, astfel încât tarifele lor sunt mai ieftine.

Astfel de servicii sunt furnizate de MTS. Codul *137* este adăugat la numărul abonatului, iar # la sfârșit. După trimiterea cererii, există un apel; dacă răspundeți la acesta, va începe o conexiune cu abonatul trimis în cerere. Costul unui apel invers depinde de țara de reședință a abonatului.

Megafon oferă, de asemenea, următoarele servicii: un apel invers poate apărea la apelarea normală a unui număr dacă serviciul Around the World este activat.

Există o altă modalitate de a transfera numărul abonatului „B” către server de la abonatul „A” - folosind un semnal DTMF. Această metodă este bună deoarece orice telefon modern poate genera semnale DTMF, iar apelurile primite de la mulți operatori sunt gratuite.

Deoarece orice telefon cu sistem de operare Android poate genera semnale DTMF, această metodă este cea mai universală, necesită o conexiune minimă de servicii suplimentare și nu necesită o cartelă SIM. Aceasta este exact metoda pe care proprietarii propriilor servere VoIP o pot folosi pentru a comunica cu abonații.

Analiza programelor a căror funcționalitate poate fi utilizată pentru a facilita utilizarea funcției Callback

Implementare directă Aplicațiile pentru DTMF Callback fără a fi legate de un operator sunt greu de găsit.

Există implementări de funcții care pot fi utile atunci când se utilizează DTMF Callback.

Una dintre aceste implementări este cel mai adesea numită prefixer. Aceste programe captează un apel primit sau ieșit și îi adaugă așa-numitul prefix sau sufix, adică adaugă numărul de telefon înainte sau după număr, rezultând următorul tip de număr: prefix xxxxxxxxx sufix, unde x este orice caracterul numărului.

Sarcina acestor programe în implementarea Callback-ului va fi adăugarea unui semnal DTMF după un anumit eveniment.

Prefixer

Cea mai apropiată soluție la această problemă este Prefixer de la compania 253°Below. Acest program conține reguli în care puteți configura:

c. Programul programului

d. Numărul care va fi înregistrat în jurnalul de apeluri

e. Numerele la care va funcționa regula

După cum urmează din interfața programului, regulile pot fi configurate atât pentru apelurile primite, cât și pentru apelurile efectuate. Adică, programul ar trebui să adauge un număr atunci când sosește un apel de intrare. În teorie, dacă trimiteți sufixul „,” pentru o pauză sau „;” pentru a aștepta un ton de apel, puteți trimite numărul către DISA.

Figura 14. Captură de ecran a prefixerului " A

Pentru apelurile efectuate, programul adaugă de fapt un prefix și un sufix, dar pentru apelurile primite, contrar regulilor configurate, nu adaugă nimic. Adică, în practică nu poate fi folosit pentru comunicarea DTMF Callback, dar poate fi folosit pentru implementarea Callback de la MTS.

Există o modalitate de a tasta un anumit caracter sau un grup de caractere pe tastatură. Cel mai adesea, programele cu astfel de funcționalități sunt folosite pentru a extinde funcțiile tastaturii sau ale interfeței de control Android. Pentru a împiedica abonatul să introducă întregul număr din memorie atunci când serverul de apelare îl sună înapoi, el poate utiliza emularea apăsării unui număr. În acest caz, telefonul va trimite semnale DTMF ca și cum utilizatorul le-ar fi introdus el însuși. Există un număr destul de mare de programe cu această funcționalitate.

Tastatură de joc

Pentru a testa această caracteristică, am folosit Gamekeyboard de la Locnet. Pentru a utiliza programul aveți nevoie de drepturi de root. Acest program conține macrocomenzi în care puteți înregistra ce caractere vor fi introduse la ce interval. Puteți personaliza dimensiunea și poziția pe ecran a butonului virtual care va activa macro-ul. Crearea unei macrocomenzi pentru acest program de pe un telefon este destul de dificilă, astfel încât domeniul său de aplicare este limitat la un număr mic de numere preferate. Acest program acceptă profiluri, așa că teoretic este posibil să se dezvolte o aplicație care să creeze o macro pentru un număr format și să o asocieze cu un buton. Această soluție va permite abonatului să nu stocheze numărul abonatului în memorie și să nu formeze întregul număr. Cu toate acestea, sunt necesare acțiuni suplimentare din partea utilizatorului.

Drepturi de rădăcină - drepturi de acces la toate funcțiile sistemelor UNIX. Deoarece Android este un sistem de operare asemănător UNIX, oferă și drepturi de root, dar producătorii de telefoane restricționează adesea accesul la acestea. Producătorul poate îngreuna obținerea drepturilor de root prin software și interzice flashingul. Producătorul poate oferi el însuși un instrument pentru obținerea drepturilor root, dar utilizatorul care a primit drepturile root renunță la garanții. În ciuda acestui fapt, se întâmplă ca singura modalitate de a implementa unele funcționalități este să aveți acces root.

Concluzie

Cele mai multe soluții pentru DTMF Callback se bazează pe utilizarea unui anumit operator. Deși există instrumente software care simplifică utilizarea DTMF Callback, nu există o soluție cuprinzătoare care să vizeze în mod special rezolvarea acestei probleme. Este benefic pentru proprietarii propriilor servere pentru furnizarea de comunicații VoIP să folosească metoda DTMF.

Partea tehnologica

Analiza instrumentelor de dezvoltare pentru Android

Limba principală pentru scrierea aplicațiilor personalizate pentru Android este Java. Interfața de programare (API) pentru lucrul cu funcțiile Android implică utilizarea Java. Pentru a crea aplicații scrise în Java pentru Android, sunt folosite instrumente de Build din Android Software Sevelopment Kit (SDK). Există o modalitate de a scrie aplicații în C/C++ pentru a face aplicațiile să ruleze mai repede. Kitul de dezvoltare nativă este folosit pentru aceasta. Există o soluție de dezvoltare C# numită Xamarin care vă permite să creați aplicații multiplatforme. Pentru a dezvolta în Python pentru Android, puteți utiliza una dintre mai multe soluții enumerate în tabel:

Tabelul 18. Comparația implementărilor python pentru Android

Python pentru Android

Scripturi Android

Python pe un cip

Cadrul kivy vă permite să creați aplicații multiplatforme. Poate fi conectat cu python pentru Android. Apoi devine posibil să scrieți aplicații cross-platform care vor rula pe Android. Există, de asemenea, o modalitate de a folosi un wrapper pentru a apela clase Java din API-ul Android numit PyJNIus.

Soluții precum kivy sau Xamarin au avantaje dacă aplicația este dezvoltată nu doar pentru Android, ci și pentru alte platforme. Cu toate acestea, atunci când utilizați funcții specifice Android, trebuie să utilizați API-ul Android. Acest lucru nu oferă un avantaj pentru sarcina în cauză, deoarece Android are propriile sale specificități cu funcționarea funcțiilor de telefon.

Facilităţi pentru dezvoltarea Android - Instrumente SDK

Principalele instrumente pentru dezvoltarea Android sunt incluse în setul de instrumente - Instrumente SDK. Acest pachet include instrumente pentru lucrul cu dispozitive virtuale. Android Virtual Device Manager (AVD) este conceput pentru a opera și configura emulatori. Pentru a crea un emulator, se folosește o imagine de sistem. Astfel de imagini pot fi descărcate în interfața grafică sau în consolă a programului Android SDK Manager. În interfața Android SDK Manager, pentru o versiune de Android, puteți selecta mai multe imagini care vor emula diferite dispozitive.

Figura 15. Captură de ecran a GUI Android SDK Manager

Un instrument important este Android Debug Bridge (adb), un program conceput pentru a depana dispozitivele Android. Adb este lansat din linia de comandă și controlat prin interfața consolei. Adb funcționează cu diferite dispozitive conectate la computer:

· Dispozitive conectate prin USB

· Dispozitive conectate prin Wifi

· Dispozitive emulate

Adb vă permite să:

· instalați sau eliminați aplicații de pe dispozitiv

· lucrați cu shell-ul de comandă al dispozitivului

· lucrul cu managerul de pachete

· lansează Intenția

· lucrul cu LogCat

SDK-ul include un set mare de instrumente care sunt cumva integrate în mediile de dezvoltare, de exemplu, Build Tools sunt incluse în Eclipse sau Android Studio.

Mediu de dezvoltare integrat Android Studio

În prezent, mediul oficial de dezvoltare integrată (IDE) pentru Android este Android Studio. Acest IDE se bazează pe IntelliJ IDEA de la JetBrains și include o serie de funcții:

· Scripturi Gradle pentru construirea apk-ului

· Creați opțiuni și generați mai multe apk-uri

· Șabloane de cod

· Editor de straturi (aspecte)

Semnarea aplicației

· Suport încorporat pentru Google Cloud Platform și capacitatea de a integra Google Cloud Messaging și App Engine

Android Studio vă permite să instalați aplicații asamblate în paralel pe mai multe dispozitive conectate prin adb.

Android Studio acceptă sisteme de control al versiunilor.

Editorul de cod sursă din Android Studio are o serie de caracteristici care facilitează dezvoltarea:

· completarea automată a cuvintelor

· indiciu despre erorile din cod

· Evidențierea sintaxelor pentru fișierele java și xml

· import automat din biblioteca Android dacă se folosește o clasă din aceasta

· îngrijirea variabilelor care nu au fost utilizate

· comentarea liniilor de cod

· săriți prin diferite fișiere de proiect în căutarea cuvântului evidențiat

Android Studio este un instrument puternic care se recomandă să fie folosit la dezvoltarea pentru Android, așa că am decis să îl folosim în dezvoltare.

programare Android callback de telefonie

Prezentare generală a limbajului de programare Python

Python este un limbaj de nivel înalt care combină mai multe paradigme de programare, cum ar fi:

· Programare orientată pe obiecte. În python, totul este un obiect: șiruri de caractere, clase, numere etc. Dacă, de exemplu, luați numărul „1” și adăugați numărul „2”:

atunci metoda __add__ va fi de fapt apelată pe obiectul 1, care va primi un tip Integer, deci următoarea intrare va da același rezultat:

· Tastare dinamică. Tipul este setat automat în timpul execuției programului. Avantajul acestui tip de tastare este ușurința în scrierea programelor și stăpânirea rapidă a acestei metode de către programator. În Python, puteți specifica singur tipul. Folosind funcția „type” puteți afla tipul unui obiect. Folosind funcțiile „int” și „float” puteți schimba tipul. Deci, puteți reprezenta numărul 1 ca un șir cu valoarea 1 sau un număr în virgulă mobilă. Exemplu:

>>> b = str(1)

>>> c = float(1)

Dacă verificați tipul de variabile, „a” va fi „int”, „b” va fi „str”, iar „c” va fi „float”

>>> tip de imprimare (a)

>>> tip de imprimare (b)

>>> tip de imprimare (c)

· Tastare strictă. Python este, în general, considerat un limbaj obiect puternic tipizat.

· Programare funcțională. Python vă permite să utilizați recursivitate, evaluare leneșă și funcții de ordin superior

· Programare imperativă. Python acceptă metoda de programare procedurală și modulele pot fi utilizate în python.

Python este considerat un limbaj destul de simplu și este cel mai popular limbaj de studiat în colegiile din SUA.

Codul Python este executat linie cu linie, așa că adesea o eroare în cod poate fi observată numai după executarea acelei linii. Lansarea programelor create folosind python pentru Android durează destul de mult.

Pentru a rula o astfel de aplicație, mijloacele tehnice trebuie să fie un dispozitiv de comunicare cu următoarele caracteristici:

· Dispozitivul trebuie să aibă 10 MB de memorie liberă în memoria sa internă pentru a instala aplicația și a stoca datele acesteia.

· Dispozitivul trebuie să aibă următorul software:

A. Android 2.2 și o versiune ulterioară

b. OpenGL ES 2.0

Cerințele de memorie internă sunt determinate de faptul că aplicația instalată va conține python pentru Android și kivy. Pentru a rula python pentru Android, aveți nevoie de OpenGL ES 2.0, care este disponibil în Android începând cu versiunea 2.2.

Prezentare generală a limbajului de programare Java

Java este un limbaj de programare orientat pe obiecte. Cu ajutorul unui compilator, codul sursă Java este convertit în cod octet, care conține un set de instrucțiuni pentru mașina Java. Această abordare asigură independența platformei. În cazul dezvoltării Android, mașina Java este Dalvik. Utilizarea unei astfel de mașini poate reduce foarte mult productivitatea.

Conceptul de Java în ceea ce privește orientarea obiectelor este similar cu python: „Java are o superclasă specială Object și toate clasele sunt subclasele sale. Prin urmare, o variabilă de referință a clasei Object se poate referi la un obiect din orice altă clasă.”

Java are un sistem flexibil de control al accesului, care este specificat de modificatorii de clasă private, public, protected sau absența unui modificator:

Tabelul 19. Modificatori și acces în Java

Dezvoltarea unei interfețe pentru utilizarea simplificată a funcției de telefonie Sună din nou

Cea mai simplă interfață pentru utilizator este interfața standard a sistemului său. Algoritmul de apel atunci când se utilizează funcția de apel invers nu trebuie să difere de algoritmul obișnuit de inițializare a apelului.

Interfața unui astfel de program ar trebui să ajute la implementarea următoarelor funcții:

1. Apel invers

o Lansați aplicația când este inițiat un apel din agenda de contacte (Contacte)

o Inițializarea unui apel către serverul de telefonie

o Primirea unui apel de la serverul de telefonie

o Stabilirea că a fost stabilit un canal de comunicare

o Analiza semnalelor DTMF de la server

o Transmite semnal DTMF în timpul unui apel

2. Lucrul cu istoria

o Posibilitatea de a șterge informații din istoricul apelurilor de sistem

o Abilitatea de a adăuga informații în istoricul apelurilor de sistem

3. Setări

o Activați/dezactivați profilul

o Abilitatea de a selecta un profil

o Abilitatea de a personaliza profilul

o Posibilitatea de a adăuga un profil

o Posibilitatea de a șterge profilul

4. Profiluri

o Posibilitatea de a schimba numărul serverului

o Abilitatea de a seta o listă albă de numere de server

o Posibilitatea de a specifica timpul de așteptare pentru un apel înapoi de la server

o Abilitatea de a specifica intervalul dintre trimiterea semnalului DTMF

Algoritmul de aplicare cu aceste funcții este următorul:

Utilizatorul deschide aplicația pentru prima dată și creează un profil. În profil, utilizatorul specifică numărul serverului de telefonie. Utilizatorul introduce în lista albă acele numere de la care serverul de telefonie îl va suna înapoi. Utilizatorul specifică timpul de așteptare în setări. Dacă nu există un apel înapoi de la server, utilizatorul va putea continua să utilizeze telefonia fără a opri manual aplicația.

După configurarea aplicației, utilizatorul poate apela o persoană din agenda de contacte. În acest moment, va apărea un meniu pentru selectarea unei aplicații cu care puteți efectua apeluri. Dacă utilizatorul selectează DTMF Callback, numărul de contact va fi salvat de aplicație, iar aplicația însăși va iniția un apel cu serverul. Când serverul se deconectează și sună înapoi, aplicația va răspunde la apel și va forma numărul salvat pe ton de contact, după care utilizatorul va trebui să aștepte o conexiune cu abonatul apelat.

După încheierea conversației, numărul abonatului la care utilizatorul a sunat ar trebui să rămână în jurnalul de apeluri. Calcularea duratei apelului ar trebui să înceapă din momentul apelării.

Dezvoltarea unui prototip care demonstrează cum se simplifică utilizarea funcției de apel invers

Pe baza capacităților lor reale și a experienței zero în dezvoltare Android, au fost dezvoltate cerințele minime pentru prototip:

1. Prototipul trebuie să ruleze pe toate dispozitivele Android moderne de la Android 2.1 la Android 5.1

2. Prototipul ar trebui să faciliteze formarea numărului abonatului atunci când serverul de telefonie sună înapoi

3. Atunci când apelați numărul unui abonat printr-un prototip, apelul trebuie inițiat către numărul serverului de telefonie și, în același timp, rețineți numărul la care a sunat abonatul

Inițializați un apel către un număr specificat

Prima etapă de dezvoltare a fost scrierea unei aplicații care poate efectua apeluri la numărul specificat în codul aplicației. Această metodă, când valorile variabilelor sunt codificate hard în cod și nu sunt preluate din surse externe, se numește codificare hard. Această metodă este folosită special pentru testarea rapidă a aplicației, pentru a nu forma numărul de fiecare dată.

S-a decis să scriu în limbajul de programare python, deoarece am experiență în scris în acest limbaj. Pentru a-l implementa, a fost necesar să se conecteze clasa Java android.intent.action.CALL din API-ul Android. Scopul acestei aplicații este de a testa capacitatea aplicației de a apela orice abonat. Această funcție este necesară pentru ca după ce abonatul „A” apelează numărul abonatului „B”, să înceapă un apel către numărul serverului de telefonie. După implementarea acestei funcții, a devenit clar că, în ciuda experienței mele, scrierea aplicațiilor pentru python vine cu multe probleme neevidente și, ca urmare, încărcarea aplicației finite durează prea mult, ceea ce este destul de critic pentru telefonie. De asemenea, a devenit evident că înțelegerea API-ului fără cunoașterea limbajului de programare Java ar fi foarte dificilă. Deoarece era încă necesară înțelegerea limbajului de programare Java, iar rezultatul final în Java a oferit avantaje, s-a decis să rescrie funcția pentru Java folosind Android Studio. Iată codul pentru funcția finală în Java:

public void Call(Vizualizare vizualizare) (

mNumberTextView.setText("Apelat pe " + tel.getText() + " Inițializat");

String toDial = "tel:" + tel.getText().toString();

startActivity(new Intent(Intent.ACTION_CALL, Uri.parse(to Dial)));

Primirea unui număr din agenda de contacte

Pentru ca o aplicație Android să fie apelată dintr-o altă aplicație, puteți utiliza Intenții explicite și implicite. O intenție explicită specifică ce clasă ar trebui să o apeleze:

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

startActivity(intentie_despre);

Activitatea AboutActivity.class este înregistrată în Android.Manifest.xml, astfel încât sistemul știe ce activitate trebuie lansată.

În Intenția implicită, în locul clasei care trebuie lansată, este indicată acțiunea la care ar trebui să reacționeze sistemul. În agenda standard de contacte (Contacte) în Android, atunci când este sunat din aceasta, are loc acțiunea ACTION_CALL_PRIVELEGED. Numărul „tel:” este transmis acestei acțiuni. De exemplu, putem folosi adb pentru a apela această acțiune scriind:

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

Unde 100 este numărul la care va suna telefonul. Dacă scrieți comanda

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

În acest caz, nu va exista niciun apel, deoarece nu vor exista privilegii de a apela un astfel de număr. În funcție de nevoie, diferite aplicații pot utiliza diferite acțiuni. Dacă nu sunt așteptate apeluri de urgență, atunci va fi folosită ACTION_CALL. Acesta este un caz mai frecvent pentru apelurile dintr-un browser sau aplicație cu un număr de contact.

Pe unele firmware, o aplicație alternativă poate fi utilizată ca agendă de contacte. Codul sursă al acestei aplicații în sine poate fi închis. Dacă în astfel de aplicații apelul este inițiat într-un alt mod, atunci poate fi dificil de ghicit prin ce intenție este inițiat apelul. În acest caz, puteți instala o agendă de contacte alternativă din Google Play sau din alte surse de încredere.

Pentru ca programul să intercepteze Intenția implicită, trebuie să adăugați un filtru de intenție la AndroidManifest.xml:

Deoarece trebuie să luați doar numărul din agenda de contact, „tel” este indicat în schemă.

Sistemul de operare Android vă va solicita acum să apelați aplicația de fiecare dată când este apelată o intenție ACTION_CALL sau ACTION_CALL_PRIVILEGED.

Pentru ca aplicația să poată folosi numărul care era în „tel”, trebuie să folosim metoda getData() în clasa de care avem nevoie:

Fereastra plutitoare cu buton

Există o bibliotecă numită StandOut cu care puteți crea o fereastră plutitoare. Biblioteca este open source și are exemple. Această bibliotecă este distribuită sub licența gratuită MIT. Această licență vă permite să distribuiți liber software care conține această bibliotecă. Biblioteca este furnizată ca atare; autorii nu sunt responsabili pentru eventualele daune pe care le-ar putea cauza.

Caracteristicile acestei biblioteci:

· Furnizarea propriei VIEW. Integrare ușoară.

Decoratori de ferestre plutitoare:

1. titlul ferestrei plutitoare

2. buton care minimizează fereastra plutitoare

3. buton care închide fereastra flotantă

4. buton pentru redimensionarea ferestrei

· O fereastră minimizată poate fi restaurată

· Crearea diferitelor tipuri de ferestre

Ferestrele pot fi mutate

La testarea exemplelor din această bibliotecă, s-a descoperit că ferestrele plutitoare pot fi deasupra tuturor ferestrelor, inclusiv în timpul unui apel. Această caracteristică poate fi utilizată pentru a crea un buton care va forma numărul dorit în dialer în timpul unui apel.

Pentru a crea o fereastră, trebuie să scrieți o clasă care va fi o extensie a clasei StandOutWindow:

Clasa publică FloatingButton extinde StandOutWindow (

public void createAndAttachView(int id, FrameLayout frame) (

LayoutInflater inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);

Vedere vizualizare = inflater.inflate(R.layout.floating_button, frame, true);

Și în res/layouts există un strat care descrie interfața acestei ferestre floating_button.xml.

Buton pentru fereastra plutitoare

Documente similare

    Arhitectura și istoria sistemului de operare Android. Limbajul de programare Java. Alegerea unui instrument pentru implementarea unei aplicații Android. Implementarea software a unei aplicații Android. Efectuarea testării software-ului dezvoltat.

    lucrare curs, adăugată 18.01.2017

    Revizuirea sistemului de operare mobil Android. Selecția de instrumente și tehnologii. Design prototip interfață grafică. Caracteristicile și descrierea interfeței cu utilizatorul. Proiectare si dezvoltare baze de date. Stabilirea listei de permisiuni necesare.

    lucrare curs, adăugată 13.09.2017

    Revizuirea programelor populare existente pentru vizualizarea vremii pe sistemul de operare Android. Sistemele de operare ale smartphone-urilor moderne. Caracteristici cheie ale tehnologiei Android, Java. Dezvoltarea părții software, alegerea limbajului, descrierea algoritmului, structura lui logică.

    lucrare curs, adaugat 16.04.2014

    Implementarea comunicațiilor telefonice printr-o rețea IP folosind un set de protocoale și echipamente. Dezvoltarea unui subsistem de rutare dinamică a apelurilor pentru un sistem de facturare și management într-o rețea de telefonie IP. Cerințe de bază pentru o interfață grafică cu utilizatorul.

    teză, adăugată 11.08.2015

    Dezvoltare de aplicații pentru smartphone pe Android OS pentru lanțul de farmacii Pharmacy. Arhitectura sistemului de operare Android. Arhitectura aplicatiei si implementare. Funcționalitatea sa. Descrierea aplicației mobile. Calculul costurilor pentru crearea unui produs.

    teză, adăugată 17.06.2017

    Caracteristicile sistemului de operare Android utilizat pentru telefoanele mobile. Crearea unui proiect Android în mediul de dezvoltare Eclipse. Structura generală și funcțiile fișierului manifest. Componentele aplicației Android. Metode de marcare.

    lucrare de curs, adăugată 15.11.2012

    Schema generală de funcționare a unei aplicații Android. Dezvoltarea unei aplicații educaționale pentru sistemul de operare Android, al cărei scop este dezvoltarea vorbirii prin pronunția răsucitoare de limbă. Descrierea componentelor aplicației dezvoltate, testarea acesteia.

    teză, adăugată 02.04.2016

    Concepte de bază ale telefoniei IP și tipuri de structură a rețelelor de telefonie IP. Gateway-uri de voce Cisco Systems pentru telefonie IP. IP IVR ca mijloc de a răspunde automat la apeluri. Avantajele construirii unui Contact Center distribuit, arhitectura construcției acestuia.

    teză, adăugată 21.04.2016

    Caracteristicile generale ale sistemului de operare Android. Dezvoltarea aplicației bazată pe crearea unui manager de fișiere. Utilizarea aplicației, obținerea accesului la fișierele stocate în „stocare în cloud” pe Internet. Calcularea costurilor software.

    teză, adăugată 04.03.2015

    Dezvoltare software pentru platforma Android versiunea 2.3: aplicație de informare pentru fanii unei echipe de fotbal, cu posibilitatea de a vizualiza evenimente, statistici și alte informații despre echipă și succesele acesteia. Listarea JsonDataManager.java.

DTMF (Multifrecvență cu două tonuri) este un ton generat atunci când apăsați un buton de pe telefon.
DTMF este utilizat pe scară largă în roboturile telefonice (IVR) pentru diverse sisteme interactive. Când se aplică la VoIP, când se lucrează cu diverse codecuri, DTMF necesită destul de multă atenție, așa că funcționarea sa trebuie înțeleasă clar.

În mod implicit, Gateway trimite DTMF în fluxul RTP ( în bandă), acest lucru funcționează bine când utilizați codecul cu rată de biți mare G.711, adică dacă fluxul de voce nu este comprimat.
Principala problemă cu DTMF apare atunci când se utilizează algoritmi de compresie precum codecul G.729. Faptul este că, atunci când este comprimat, calitatea fluxului de cap se deteriorează considerabil și, deși acest lucru nu are aproape niciun efect asupra capacității abonaților de a se înțelege, tonul DTMF nu mai este suficient de clar și este perceput incorect.

Această problemă poate fi rezolvată folosind releu DTMF, în care semnalele DTMF sunt transportate separat de fluxul RTP, sau în afara benzii.

Să ne uităm la câteva exemple.


Figura prezintă o diagramă de conectare a telefoniei printr-un gateway H.323.

Pe secțiunea PSTN, DTMF este trimis în bandă, adică nu există nici măcar conceptul de releu DTMF, deoarece este o linie analogică.

Releul DTMF devine necesar doar în secțiunea VoIP, unde pot fi utilizate metode de compresie.
Se mai poate spune că:
- în bandă Releul DTMF va intra în fluxul RTP, adică. în figură de-a lungul liniei roșii RTP.
- în afara benzii Releul DTMF va merge împreună cu semnalizarea, de exemplu. de-a lungul liniilor verzi din figură.

La site-uri telefon-CUCMȘi CUCM-H.323Gateway Este utilizată semnalizare diferită și, prin urmare, diferite metode de releu DTMF. Din partea telefonului vin mesajele SCCP, care conțin DTMF în codificarea lor, din partea gateway-ului H.323, semnalizarea împreună cu DTMF provine din mesajele H.245.
CUCM în cazul nostru acționează ca un DTMF Forwarder între diferite tipuri de semnalizare.

Locația activată telefon-CUCM doar noi vom putea în afara benzii, deoarece telefonul SCCP nu acceptă în bandă.
Locația activată CUCM-H.323Gateway metode precum în bandă, asa de în afara benzii. Mai mult, în cazul unui telefon SCCP, pentru a activa în bandă va necesita utilizare MTP.

De asemenea, trebuie să înțelegeți că setările DTMF pentru trunchiul H.323 sunt setările pentru funcționarea acestui trunk cu un Dial-peer pe un Gateway H.323 fizic.

În funcție de protocolul de semnalizare (H.323, SIP, MGCP, SCCP), există diferite metode de implementare a releului DTMF. În orice caz, Call Manager CUCM încearcă inițial să decoordoneze o metodă comună tuturor. Dacă nu se găsește o metodă comună, se încearcă utilizarea MTP.

Suport DTMF H.323

Cisco Gateways acceptă următoarele metode DTMF Relay:

  • Proprietate Cisco: - în bandă releu DTMF. DTMF este trimis în același flux RTP ca și vocea, dar tonurile DTMF sunt codificate ușor diferit, ceea ce le permite să fie distinse și primite cu succes pe cealaltă parte. Probele DTMF sunt identificate ca Tipul de sarcină utilă RTP 121. Metoda funcționează numai dacă există echipamente Cisco pe ambele părți și aceeași metodă
  • H.245 alfanumeric:-Releu DTMF în afara benzii. Separă DTMF de fluxul RTP și le trimite prin intermediul H.245 Mesaje de indicare a intrării utilizatorului. Această metodă nu trimite lungimea tonului: Lungimea tonului este întotdeauna considerată a fi de 500 msec.
    În acest exemplu am făcut clic pe „5”.

    Depanare: depanați h245 asn1

  • Semnal H.245:-Releu DTMF în afara benzii. Această metodă este capabilă să trimită lungimea tonului ( lungimea tonului).

    Depanare: depanați h245 asn1

  • NTE:- releu DTMF în bandă. Funcționează similar cu proprietatea Cisco, DTMF este trimis în același flux RTP ca și voce, folosind Tipul de sarcină utilă RTP. O altă sarcină utilă nu permite comprimarea mostrelor DTMF. Spre deosebire de Proprietate Cisco, NTE folosește standardul RFC 2833.

    Depanare: depanați h245 asn1

Următoarele comenzi sunt disponibile pe un router Cisco:

Router(config-dial-peer)#dtmf-releu ? cisco-rtp Cisco Proprietar RTP h245-alfanumeric DTMF Releu prin H245 Alfanumeric IE h245-semnal DTMF Releu prin H245 Semnal IE rtp-nte RTP numit Eveniment telefonic RFC 2833 Router (config-dial-peer)#

Cea mai buna practica:
Pe dialpir, cel mai bine este să dați comenzi după cum urmează:

Voce dial-peer 3000 voip descriere Apeluri lungi destinație-model... țintă sesiune ipv4:192.168.0.11 dtmf-releu h245-semnal h245-alfanumeric cisco-rtp rtp-nte codec g711ulaw no vad

În acest caz, ambele părți pot negocia între ele metoda corespunzătoare dtmf-releu.

Pentru a determina metoda de releu DTMF selectată:
afișează vocea activă a apelului

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

Astfel, CUCM verifică automat ce metodă DTMF este potrivită pentru ambele părți.
În ceea ce privește Gateway-ul H.323 în CUCM, nu există setări DTMF acolo. CUCM acceptă setarea celeilalte părți.

Suport MGCP DTMF

Următoarele metode de releu DTMF sunt disponibile pentru MGCP:

  • Proprietate Cisco: DTMF este trimis în același flux RTP ca și vocea, dar tonurile DTMF sunt codificate ușor diferit, ceea ce le permite să fie distinse și primite cu succes pe cealaltă parte. Probele DTMF sunt identificate ca Tipul de sarcină utilă RTP 121. Metoda funcționează numai dacă există echipamente Cisco de ambele părți și este selectată o metodă similară (nu se negociază nimic).
  • NSE: NSE este în esență NTE proprietar Cisco. Metoda funcționează numai dacă există echipamente Cisco de ambele părți și este selectată o metodă similară (nu se negociază nimic).
  • NTE: la rândul său, poate funcționa în două moduri:
    - Modul controlat de gateway (NTE GW): Gateway-urile negociază DTMF între ele în mod independent, schimbând informații de capacitate în mesajele SDP. Acest proces este transparent pentru agentul de apelare. În acest caz, ambele gateway-uri au MGCP care rulează și ambele sunt conectate la același CUCM.
    - Modul controlat de agent de apel (NTE CA):În negocieri, se folosește Call Agent, adică. acționează în numele gateway-ului MGCP (mesajele SDP sunt trimise agentului). Acest mod poate fi utilizat în cazul în care al doilea gateway nu este un MGCP-Gateway. După negociere, agentul de apel informează gateway-ul despre valorile RTP-NTE acceptate cu cealaltă parte.
  • În afara benzii: Tonurile sunt trimise către CUCM folosind mesaje MGCP, de ex. în afara fluxului RTP (Out-of-band). CUCM la rândul său primește DTMF și îl transmite către cealaltă parte.

MGCP utilizează releul DTMF numai pentru codecuri cu rată scăzută (G729, iLBC, GSM etc.). Pentru codecurile cu rată de biți va fi trimis G711 DTMF în bandă.

În cazul MGCP, putem alege dacă setările DTMF vor fi dictate de Agentul de Apel (CUCM) sau dacă vor fi folosite cele setate pe Gateway.
Să mergem la CUCM: Dispozitiv > Gateway, selectați Gateway-ul MGCP corespunzător.
Suntem interesați de secțiune Tip de releu DTMF.

La alegere Configurație actuală GW, se va folosi setarea care este pe gateway.
Pe IOS Gateway putem seta DTMF cu următoarea comandă:

Router(config)#mgcp dtmf-relay voip codec all mode? cisco Setați modul releu mgcp dtmf să fie dezactivat Cisco Setați modul releu mgcp dtmf să fie dezactivat nse Setați modul releu mgcp dtmf să fie nse nte-ca Setați modul releu mgcp dtmf să fie nte-ca nte-gw Setați mgcp dtmf -modul releu să fie nte-gw în afara benzii Setați modul mgcp dtmf-releu să fie în afara benzii

Dacă punem altă alegere pe CUCM, de exemplu cisco, comanda corespunzătoare de mai sus va fi introdusă automat (mecanisme MGCP).

A fost observată o eroare cu MGCP:

CSCta69407 Detalii despre eroare(Atunci când se utilizează orice tip de semnalizare DTMF în bandă (RTP-NTE, NSE sau proprietate Cisco) DSP-urile nu dezactivează semnalizarea OOB dtmf folosind pachete mgcp. Prin urmare, cifrele duplicate vor fi văzute pe GW-ul de terminare ca unul provenind de la rtp și altele care provin de la CUCM)

Soluție: Utilizați tipul de releu mgcp dtmf în afara benzii.

Suport SIP DTMF

În mod implicit, SIP trimite DTMF în bandă, dar putem folosi următoarele opțiuni:

  • RTP-NTE (NTE sau RFC 2833) - în bandă releu DTMF. Care utilizează pachete RTP Named Telephony Event (NTE) în loc de pachete de voce pentru a transporta informații DTMF. În acest caz, SDP este utilizat pentru a negocia între noduri valoarea payload type=NTE. Deși formal acest lucru în bandă, dar în realitate tonul nu se va auzi în fluxul audio, deoarece pachetele NTE nu sunt voce
    RTP-NTE nu poate funcționa cu telefoanele SCCP, deoarece telefoanele SCCP utilizează numai releu DTMF în afara benzii. Din acest motiv, MTP trebuie utilizat împreună cu RTP-NTE.
  • SIP INFORMAȚII - în afara benzii(OOB) releu DTMF. Informațiile DTMF sunt trimise în mesajele SIP INFO. Acestea. dacă gateway-ul primește un mesaj INFO, emite un ton adecvat.
  • SIP NOTIFICARE - în afara benzii(OOB) releu DTMF. sau se mai numeste Releu DTMF în afara bandă bazat pe NOTIFY. Acest tip de releu DTMF folosește NOTIFY pentru a transmite tonuri. Această metodă este compatibilă cu telefoanele SCCP și poate fi folosită și cu telefoane analogice conectate la porturile FXS de pe gateway.
  • KPML - în afara benzii(OOB) releu DTMF. Când utilizați limbajul de marcare pentru apăsarea tastelor, telefonul SIP trimite numărul cifră cu cifră. Această metodă este similară cu SIP NOTIFICARE, cu singura diferență că dă fiecare cifră separat.
router(config-dial-peer)#session protocol sipv2 router(config-dial-peer)#dtmf-relay ? cisco-rtp Cisco Proprietar RTP h245-alfanumeric DTMF Releu prin H245 Alfanumeric IE h245-semnal DTMF Releu prin H245 Semnal IE rtp-nte RTP Eveniment telefonic denumit RFC 2833 sip-kpml DTMF Releu prin KPML peste Releu SBCFFRIBE-NOTIFYP prin router de mesaje SIP NOTIFY (config-dial-peer)#

Aici vedem mai multe metode disponibile, potrivite doar pentru lucrul cu CUCM
- RTP-NTE (NTE sau RFC 2833);
- SIP-NOTIFICAȚI;
- SIP-KPML.

Modelele controlate radio folosesc circuite RF care au un domeniu de operare limitat, un răspuns în frecvență limitat și probleme de potrivire cu controlerele. Utilizarea unui telefon mobil pentru a controla modelul evită aceste dezavantaje. Atunci când utilizați un telefon mobil, modelul poate fi controlat în toată zona de acoperire a operatorului și poate funcționa fără probleme cu dispozitive externe.

Deși aspectul și capacitățile unui model pot varia foarte mult, toate modelele au o parte mecanică și o parte care controlează modelul. Managementul modelului include trei etape: recepția comenzii, procesarea și execuția. De regulă, comenzile sunt date de senzori externi, procesate de un microcontroler, iar motoarele sunt utilizate pentru execuție.

Revizuire

Acest aparat folosește două telefoane mobile pentru control - unul în mâinile tale ca telecomandă, celălalt instalat pe model ca receptor. Se primește un apel de pe telefonul dvs. către telefonul modelului, iar atunci când apăsați tastele în timpul apelului, se primește un semnal cu mai multe frecvențe de la telefonul mobil. Acest semnal se numește Dual-Tone Multi-Frequency (DTMF).
Folosind decodorul MT8870 DTMF, DTMF este decodificat în cod binar, care este procesat de microcontrolerul ATmega16 și apoi emite o comandă către driverul motorului.

După cum puteți vedea, acest model este destul de simplu și nu necesită construcția unor transmițătoare complexe.
Semnalul DTMF este utilizat pentru formarea unui număr de telefon sau pentru răspunsul vocal.
Semnalul este format din două semnale sinusoidale de o frecvență fixă ​​și este ușor decodat în cod binar și invers. Pentru a codifica un caracter într-un semnal DTMF, trebuie adăugate două semnale sinusoidale. De exemplu, dacă trebuie să transmitem numărul 5, atunci frecvența unui semnal va fi de 1336 Hz, iar celălalt de 770 Hz și vom primi acest semnal pe al doilea telefon.

Descrierea circuitului

Schema bloc arată principiul de funcționare al dispozitivului. Componentele sale principale sunt un decodor DTMF, un microcontroler și un driver de motor.

Cipul MT8870 este folosit ca decodor DTMF. Utilizează metode de recunoaștere a semnalului digital și emite un semnal la 4 pini. De asemenea, nu necesită filtrarea preliminară a semnalului de intrare. Când un semnal de intrare este aplicat la PIN2 (B-), semnalul decodat este scos la pinii Q1 (pin11) la (pin14).

ATmega16 este un microcontroler CMOS pe 8 biți bazat pe arhitectura avansată AVR RISC, cu un consum redus de energie. Are 16KB de memorie flash programabilă, 512B EEPROM, 1KB SRAM, 32 de linii I/O și 32 de registre. De la pinii microcontrolerului PD0 - PD3 și PD7, un semnal este trimis către ieșirile IN1 - IN4 și EN1-EN2 ale driverului de motor L293d. Comutatorul S1 este utilizat pentru resetarea manuală.

Program

Microcontrolerul este programat folosind WIN AVR. Pentru cei care nu știu cum să facă acest lucru, aruncați o privire, totul este descris în detaliu acolo. Articolul este însoțit de o sursă și un fișier hex. Dacă WinAVR este instalat, atunci nu ar trebui să existe probleme cu deschiderea.

Loc de munca

Pentru a controla modelul, trebuie să apelați telefonul mobil al modelului de pe orice telefon. Când aparatul răspunde automat, apăsați următoarele taste:
2 – a merge înainte.
4 – virați la stânga.
8 – mișcare în sens invers.
6 – virați la dreapta.
5 – oprire.

Lista elementelor:
Decodor DTMF MT8870 – 1.
Microcontroler Atmega16 – 1.
Driver de motor L293d – 1.
Op-amp Cd7004 – 1.
Dioda 1N4007 – 1.
Rezistor 100 kOhm – 2.
Rezistor 10 kOhm – 5.
Rezistor 330 kOhm – 1.
Condensator 0,47 uF – 1.
Condensator 0,1uF – 1.
Condensator 22pF – 4.
Cuarț 3,57 MHz – 1.
Cuarț 12 MHz – 1.
Buton de moment – ​​1.
Motoare (6V, 50 rpm) – 2 sau 4 pentru tracțiune integrală.
Baterie 6V - 1.
Roți - 4.
Telefon mobil - 2.
Difuzor (mâini libere) – 1.

Trebuie să fixați telefonul pe șasiu. Telefonul este conectat la robot printr-o cască cu mâini libere.

Conexiune hands-free
Am folosit hands-free cu un conector mini jack.

Puteți descărca codul sursă al programului și firmware-ul de mai jos

Lista radioelementelor

Desemnare Tip Denumirea Cantitate NotăMagazinBlocnotesul meu
IC1 Decodor DTMFMT88701 La blocnotes
IC2 MK AVR pe 8 biți

ATmega16

1 La blocnotes
IC3 Sofer de motorL293D1 La blocnotes
IC4 Buffer IC, driver

SN74LS04

1 La blocnotes
D1 Dioda redresoare

1N4007

1 La blocnotes
C1 Condensator0,47 uF1 La blocnotes
C2, C3, C5, C6 Condensator22 pF4 La blocnotes
C4 Condensator0,1 uF1 La blocnotes
R1, R2 Rezistor

100 kOhm

2 La blocnotes
R3 Rezistor

330 kOhm

1 La blocnotes
R4-R8 Rezistor

10 kOhm

5 La blocnotes
XTAL1 Rezonator cu cuarț3,57 MHz1 La blocnotes
XTAL2 Rezonator cu cuarț12 MHz1

Salutare tuturor.
Vrei să controlezi ceva folosind telefonul mobil și fără microcontrolere de lux? Dacă da, bine ați venit la cat.

Recent, pe Muska au existat mai multe recenzii ale modulelor GSM, precum SIM800, cu ajutorul cărora puteți controla orice printr-o rețea celulară. Dar problema este că toate necesită conectarea la un microcontroler, scrierea firmware-ului și alte lucruri care sunt dificile pentru persoana neinițiată. Cealaltă extremă este: „Am lipit un releu la motorul de vibrații al telefonului, totul funcționează pentru mine” :)) Este posibil și acest lucru, dar nu fi surprins dacă pompa încearcă să-ți ude sera cu apă dintr-un înghețat. bine, după sosirea SMS-ului „Un an nou fericit! de la un expeditor necunoscut :)))
În general, am decis să umplu golul dintre aceste două soluții și să le ofer pe ale mele.

Astăzi vom vorbi despre decodorul de semnal DTMF, sau în termeni simpli, un semnal de ton.
Curioșii pot citi
Tehnologia este destul de depășită, dar este încă acceptată de toate telefoanele.
De fapt, este apelarea cu tonuri pe care o folosești atunci când apelezi la o instituție, iar robotul telefonic îți spune: „dacă știi numărul abonatului, apasă „1”, dacă vrei să afli despre noile noastre oferte, apasă „2” și așa mai departe. Prin apăsarea butonului cu numărul dorit de pe telefon, trimiteți un semnal de un anumit ton prin canalul vocal. Fiecare caracter de pe tastatura telefonului are propria „melodie”. Acest sunet îl decodifică decodorul DTMF, transformându-l în semnale la ieșirile sale.


Placa este asamblata pe un microcircuit, este alimentata de 5 Volti si are urmatoarele iesiri: Q1-Q4 iesiri discrete, iesiri inverse StQ/StQ, care sunt declansate ori de cate ori un semnal este recunoscut corect. Intrare IN pentru semnal audio dacă nu doriți să utilizați mufa de 3,5 mm lipită pe placă. Alimentare GND/VCC, 5 volți.
Ieșirile Q1-Q4 sunt declanșate în conformitate cu tabelul:

De exemplu, acum două LED-uri din mijloc de pe placa mea sunt aprinse, ieșirile Q2 și Q3 sunt activate, uitați-vă la tabel - aceasta corespunde tastei apăsate „6”. Dacă apăs pe tasta „1”, ieșirea Q1 va funcționa, dacă „2”, atunci Q2. Dacă „3”, atunci ieșirile Q1 și Q2 se vor „aprinde” simultan. Și așa mai departe.
În general, acesta este un cod pe 4 biți. Dacă îl decriptați cu un cip special, puteți obține 16 ieșiri.
Apropo, Ali vinde placa deja cu decodor, dar costă mai mult. O optiune pentru cei avansati este sa conecteze toate acestea la un microcontroler, eu am facut asta, poti chiar sa setezi o parola, sa suni si sa tastazi parola, sa ai acces la control...
Dar acest lucru nu mai intră în sfera articolului meu, pentru că... la începutul articolului am promis că totul va fi simplu.

Și așa, luăm tranzistorul KT815, un rezistor de 1,1 kOhm sau cam așa ceva, un releu de 12 V și un stabilizator LM7805. Părțile rămase (dioda de protecție 1N4007 pe bobina releului, condensatoare ceramice galbene de 0,1 µF și condensatoare electrolitice de 1000 µF) sunt de dorit, dar funcționează fără ele. Un tweeter este conectat la releu ca sarcină.
Nu voi desena o diagramă, instalația este articulată, puteți vedea totul în fotografie:


Pe de alta parte:


Alimentarea generală a structurii este de 12 V, deoarece acest lucru este cerut de releu, dar pentru placă este coborât de stabilizator la 5 V.
Conectăm mufa de 3,5 mm de pe placă cu un cablu la ieșirea pentru căști a telefonului, setăm auto-pickup și gata. Acum, dacă apelați un telefon conectat la placă, așteptați până când receptorul este ridicat și apăsați „1”, releul va funcționa și soneria va începe să sune. Dacă apăsați „2”, totul se va opri. Apropo, indiferent de ceea ce intenționați să controlați, v-aș recomanda să lăsați soneria. Acest lucru este convenabil pentru că îl puteți auzi prin telefon și în acest fel puteți obține feedback: ați sunat, auziți un bip, ceea ce înseamnă că încărcarea este pornită :)

Am făcut un scurt videoclip care arată cum funcționează totul.

Plănuiesc să cumpăr +128 Adauga la favorite Mi-a placut recenzia +72 +169
  • Serghei Savenkov

    un fel de recenzie „scurtă”... de parcă s-ar grăbi undeva