1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
|
---
title: Mobile Connection
slug: WebAPI/Mobile_Connection
translation_of: Archive/B2G_OS/API/Mobile_Connection_API
---
<p>{{ non-standard_header() }}</p>
<p>{{ B2GOnlyHeader2('certified') }}</p>
<h2 id="Sumário">Sumário</h2>
<p>Essa API tem 2 propósitos:</p>
<ul>
<li>Dar acesso a informações detalhadas sobre os estados atuais da conexão móvel do dispositivo</li>
<li>Dar acesso a uma capacidade específica junto com ICC (o cartão SIM/RUIM)</li>
</ul>
<p>Como essa API pode acessar funcionalidades que podem ter um impacto no plano móvel assinado pelo usuário (algumas funcionalidades pode ter custo para utilizar ou causar danos ao ICC), é restrita para aplicações certificadas apenas.</p>
<p>O ponto inicial principal dessa API é a propriedade {{domxref("window.navigator.mozMobileConnection","navigator.mozMobileConnection")}} que é uma instância da interface {{domxref("MozMobileConnection")}}.</p>
<h2 id="Estado_da_conexão_móvel">Estado da conexão móvel</h2>
<p>O estado da conexão móvel é dividida em dois: de um lado a conexão <code>voice</code>, do outro conexão <code>data</code>. O dado relacionado a cada tipo de conexão é acessível através pelas propriedades {{domxref("MozMobileConnection.voice")}} e {{domxref("MozMobileConnection.data")}} que ambas retornarão o objeto {{domxref("MozMobileConnectionInfo")}}.</p>
<p>Esses objetos permitem acesso a todas as informações relacionadas a qualidade da rede (<a href="/en-US/docs/DOM/MozMobileConnectionInfo.signalStrength" title="/en-US/docs/DOM/MozMobileConnectionInfo.signalStrength">signal strength</a>, <a href="/en-US/docs/DOM/MozMobileConnectionInfo.relSignalStrength" title="/en-US/docs/DOM/MozMobileConnectionInfo.relSignalStrength">quality of the signal</a>, posição das <a href="/en-US/docs/DOM/MozMobileConnectionInfo.cell" title="/en-US/docs/DOM/MozMobileConnectionInfo.cell">network's cells</a>, <a href="/en-US/docs/DOM/MozMobileConnectionInfo.emergencyCallsOnly" title="/en-US/docs/DOM/MozMobileConnectionInfo.emergencyCallsOnly">restricted usage</a>, <a href="/en-US/docs/DOM/MozMobileConnectionInfo.roaming" title="/en-US/docs/DOM/MozMobileConnectionInfo.roaming">roaming</a>, etc.), e relacionado à <a href="/en-US/docs/DOM/MozMobileConnectionInfo.network" title="/en-US/docs/DOM/MozMobileConnectionInfo.network">the carrier operating the network</a>.</p>
<pre class="brush: js">var cnx = navigator.mozMobileConnection;
console.log("The voice operator is " + cnx.voice.network.longName);
if (cnx.voice.connected) {
console.log("The signal has a strength of " + (+cnx.voice.relSignalStrength) + "%");
} else {
console.log("The state of the connection is: " + cnx.voice.state);
}
</pre>
<h2 id="Funcionalidades_ICC">Funcionalidades ICC</h2>
<p>As funcionalidades disponíveis para o ICC pode ser dividida dentro de duas categorias: o gerenciamento do próprio ICC e a utilização do comando integrado disponível dentro do <a href="http://en.wikipedia.org/wiki/SIM_Application_Toolkit" title="http://en.wikipedia.org/wiki/SIM_Application_Toolkit">STK</a> (<em>SIM Application Toolkit</em>).</p>
<h3 id="Ações_Básicas">Ações Básicas</h3>
<p>O {{domxref("MozMobileConnection")}} fornece métodos para lidar com comportamentos comuns no ICCs.</p>
<div class="note">
<p><strong>Nota:</strong> All original methods from the <code>MozMobileConnection</code> interface are fully asynchronous. They all return a {{domxref("DOMRequest")}} object which has an <code>onsuccess</code> and <code>onerror</code> event handler to handle the success or failure of the method call.</p>
</div>
<h4 id="Bloqueio_do_Cartão">Bloqueio do Cartão</h4>
<p>Enquanto o cartão estiver bloqueado, o usuário é incapaz de utilizar uma rede móvel. É possível gerenciar o bloqueio do cartão com os métodos {{domxref("MozMobileConnection.getCardLock","getCardLock()")}}, {{domxref("MozMobileConnection.setCardLock","setCardLock()")}}, e {{domxref("MozMobileConnection.unlockCardLock","unlockCardLock()")}}.</p>
<p>Se {{domxref("MozMobileConnection.getCardLock","getCardLock()")}} permite pegar algumas informações detalhadas sobre o bloqueio, também possível ter informação rápida sobre o bloqueio através {{domxref("MozMobileConnection.cardState")}} que retorna uma string representando o estado atual do bloqueio.</p>
<div class="note">
<p><strong>Nota:</strong> Even if the state change requests are successfully handled, it does not mean that the operations are necessarily successful. For that reason, any change in the card state is tracked independently through events:</p>
<ul>
<li>The {{event("icccardlockerror")}} event is triggered each time a call to {{domxref("MozMobileConnection.setCardLock","setCardLock()")}} or {{domxref("MozMobileConnection.unlockCardLock","unlockCardLock()")}} fails.</li>
<li>The {{event("cardstatechange")}} event is triggered each time the {{domxref("MozMobileConnection.cardState","cardState")}} property changes.</li>
</ul>
</div>
<pre class="brush: js">var cnx = navigator.mozMobileConnection;
function unlockCard() {
var unlockOptions = {
lockType: "pin",
pin : prompt("Please, enter your PIN")
}
var unlock = cnx.unlockCardLock(unlockOptions);
unlock.onsuccess = function () {
console.log("The card has successfully handled the PIN number.");
if (this.result.success === false) {
if (this.result.retryCount > 0) {
console.log("But you mistyped your PIN, you have " + this.result.retryCount + " tries left.");
} else {
console.log("But your card is hard locked, you need to contact your carrier to get a special unlocking code.");
}
}
}
unlock.onerror = function () {
console.log("Hu! Something goes very wrong!")
}
}
cnx.addEventListener('icccardlockerror', function () {
// In case of error, ask the user for his PIN again
unlockCard();
});
cnx.addEventListener('cardsatechange', function () {
// In case the card state change and required to be unlocked
if (cnx.cardState === 'pinRequired') {
unlockCard();
}
}
// First call to unlockCard if required
if (cnx.cardState === 'pinRequired') {
unlockCard();
}
</pre>
<h4 id="Mensagens_MMI">Mensagens MMI</h4>
<p><abbr title="Man Machine Interface">Mensagens MMI</abbr> são códigos legíveis para humanos que, uma vez digitado no teclado do aparelho, permite disparo de ações específicas do <a class="external" href="http://en.wikipedia.org/wiki/Radio_Interface_Layer" title="Wikipedia: Radio Interface Layer">RIL</a> ou pegar resposta da rede pela requisição<a class="external" href="http://en.wikipedia.org/wiki/USSD" title="Wikipedia: Unstructured Supplementary Service Data"> USSD</a>. Um exemplo comum é digitar um código curto para receber número <a href="http://en.wikipedia.org/wiki/International_Mobile_Station_Equipment_Identity" title="http://en.wikipedia.org/wiki/International_Mobile_Station_Equipment_Identity">IMEI</a> do aparelho.</p>
<p>Essas mensagens são enviadas utilizando o método {{domxref("MozMobileConnection.sendMMI()")}} (e pode ser cancelado com {{domxref("MozMobileConnection.cancelMMI","cancelMMI()")}}). Mesmo com isso irá retornar um objeto {{domxref("DOMRequest")}}, a resposta para este tipo de mensagem é manuseada de duas maneiras:</p>
<ul>
<li>Se o código MMI necessita enviar uma requisição USSD, o <code>success </code>da requesição significa que o RIL foi processado com sucesso e enviou a requisição USSD para a rede. Porém, a resposta da rede é reportada através do evento {{event("ussdreceived")}}.</li>
<li>Se o código MMI não for associado com o USSD mas com outra requisição RIL, seu resultado, se um for necessário, é enviado pelo retorno requisitado <code>success</code> ou <code>error</code>.</li>
</ul>
<pre class="brush: js">var cnx = navigator.mozMobileConnection;
cnx.addEventHandler('ussdreceived', function (evt) {
console.log('Network message: ' + evt.data.message);
});
var MMIRequest = cnx.sendMMI(prompt('Provide a valid MMI'));
MMIRequest.onerror = function() {
console.log("Mmmh... Something goes wrong.");
}
</pre>
<h4 id="Opções_encaminhamento_de_chamada">Opções encaminhamento de chamada</h4>
<p>Opções de encaminhamento permite definir como uma ligação pode ou não ser encaminhada para outro número de telefone.</p>
<p>Essas opções são manuseadas com os métodos {{domxref("MozMobileConnection.getCallForwardingOption","getCallForwardingOption()")}} e {{domxref("MozMobileConnection.setCallForwardingOption","setCallForwardingOption()")}}.</p>
<pre class="brush: js">var options = {
action : MozMobileCFInfo.CALL_FORWARD_ACTION_ENABLE,
reason : MozMobileCFInfo.CALL_FORWARD_REASON_UNCONDITIONAL,
serviceClass: MozMobileConnectionInfo.ICC_SERVICE_CLASS_VOICE,
number : prompt('To which phone number would you wish to forward the calls?'),
timeSeconds : 5
};
var setOption = navigator.mozMobileConnection.setCallForwardingOption(options);
setOption.onsuccess = function () {
console.log('Options successfully set');
}
setOption.onerror = function () {
console.log('Unable to set options: ' + this.error.name);
}
</pre>
<h3 id="Comandos_STK">Comandos STK</h3>
<p>Os comandos STK dependem em vários fatores (operadoras, modelos de chips, etc.) mas podem sempre ser acessados pela propriedade {{domxref("MozMobileConnection.icc")}} que retorna um objeto {{domxref("MozIccManager")}}.</p>
<div class="warning">
<p><strong>Atenção:</strong> É recomendado utilizando comando STK apenas se você já sabe exatamente o que você está fazendo, porque a utilização errada pode danificar o chip e torná-lo inutilizável.</p>
</div>
<h2 id="Especificações">Especificações</h2>
<p>Não faz parte de nenhuma especificação.</p>
<h2 id="Veja_também">Veja também</h2>
<ul>
<li>{{domxref("window.navigator.mozMobileConnection","navigator.mozMobileConnection")}}</li>
<li>{{domxref("MozMobileConnection")}}</li>
<li>{{domxref("MozMobileConnectionInfo")}}</li>
<li>{{domxref("MozMobileICCInfo")}}</li>
<li>{{domxref("MozMobileNetworkInfo")}}</li>
<li>{{domxref("MozMobileCFInfo")}}</li>
<li>{{domxref("MozMobileCellInfo")}}</li>
<li>{{domxref("MozIccManager")}}</li>
<li>{{domxref("MozStkCommandEvent")}}</li>
</ul>
|