SlideShare una empresa de Scribd logo
1 de 6
Descargar para leer sin conexión
1
Android
API de Telefonia e SMS
Tópicos Abordados
• Telefonia
• Fazendo ligações
• Telephony Manager
• Trabalhando com eventos do telefone
• SMS
• Enviar mensagens de texto
• Receber mensagens de texto
Fazendo Ligações
• Para realizar uma ligação, basta enviar ao
Android uma intent cuja action é
ACTION_DIAL, com uma URI que representa o
número a ser discado
Uri uri = Uri.parse("tel:555-3344");
Intent i = new Intent(Intent.ACTION_DIAL, uri);
startActivity(i);
2
Fazendo Ligações
• Uma alternativa é usar a intent ACTION_CALL
• Faz a discagem direta, sem confirmação
• É preciso de declarar a permissão
CALL_PHONE
Uri uri = Uri.parse("tel:555-3344");
Intent i = new Intent(Intent.ACTION_CALL, uri);
startActivity(i);
<uses-permission
android:name="android.permission.CALL_PHONE" />
Telephony Manager
• Permite acessar as propriedades do telefone
TelephonyManager tm =
(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
• É preciso de permissão para ler as
propriedades do telefone
<uses-permission
android:name="android.permission.READ_PHONE_STATE" />
Métodos Importantes
Método Descrição Retorno
getPhoneType() Tipo do telefone
PHONE_TYPE_CDMA
PHONE_TYPE_GSM
PHONE_TYPE_NONE
getDataActivity()
Atividade de transferência
de dados
DATA_ACTIVITY_IN
DATA_ACTIVITY_OUT
DATA_ACTIVITY_INOUT
DATA_ACTIVITY_NONE
getDataState()
Estado da conexão de
dados
DATA_CONNECTED
DATA_CONNECTING
DATA_DISCONNECTED
DATA_SUSPENDED
getSimState()
Estado do cartão SIM do
aparelho
SIM_STATE_ABSENT
SIM_STATE_NETWORK_LOCKED
SIM_STATE_PIN_REQUIRED
SIM_STATE_PUK_REQUIRED
SIM_STATE_UNKNOWN
SIM_STATE_READY
3
Métodos Importantes
Método Descrição Retorno
getNetworkType() Tipo da rede de conexão
NETWORK_TYPE_1xRTT
NETWORK_TYPE_CDMA
NETWORK_TYPE_EDGE
NETWORK_TYPE_EVDO_0
NETWORK_TYPE_EVDO_A
NETWORK_TYPE_EVDO_B
NETWORK_TYPE_GPRS
NETWORK_TYPE_HSDPA
NETWORK_TYPE_HSPA
NETWORK_TYPE_HSUPA
NETWORK_TYPE_IDEN
NETWORK_TYPE_UMTS
NETWORK_TYPE_UNKNOWN
Recebendo Eventos do Telefone
• Sua aplicação pode ser notificada a respeito
de mudanças que ocorrem com relação à
telefonia
• Mudança na força do sinal
• Telefone tocando
• Tráfego de dados
• etc.
• Para receber os eventos, é necessário invocar
o método listen() e passar uma instância de
PhoneStateListener
Exemplo de Registro de Evento
• O primeiro passo é criar uma subclasse de
PhoneStateListener
PhoneStateListener listener = new PhoneStateListener() {
public void onCallStateChanged(int state, String incomingNumber) {
if (state == TelephonyManager.CALL_STATE_RINGING) {
//fazer alguma coisa
}
}
public void onSignalStrengthsChanged(SignalStrength strength) {
int nivel = strength.getGsmSignalStrength();
//fazer alguma coisa
}
};
4
Exemplo de Registro de Evento
• Depois basta registrar o interesse em ser
notificado através do método listen() do
objeto TelephonyManager
|
tm.listen(listener,
PhoneStateListener.LISTEN_CALL_STATE |
PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
Usar o OR binário para
indicar em quais eventos há
o interesse
Para cada método
sobrescrito existe uma
constante correspondente
tm.listen(listener,
PhoneStateListener.LISTEN_NONE);
Remove os listeners
Enviando SMS
• A maneira mais simples de enviar SMS no
Android é utilizar a própria aplicação nativa de
envio de SMS
• Basta utilizar uma intent
Uri uri = Uri.parse("sms:555-5555");
Intent i = new Intent(Intent.ACTION_SENDTO, uri);
i.putExtra("sms_body", "Mensagem SMS");
startActivity(i);
A Classe SMSManager
• Ao invés de utilizar a aplicação nativa do
Android para enviar SMS, também é possível
utilizar a classe SMSManager.
• É preciso definir uma permissão
SmsManager smsMgr = SmsManager.getDefault();
<uses-permission
android:name="android.permission.SEND_SMS" />
5
Enviando uma Mensagem de Texto
• O método sendTextMessage() é usado
smsMgr.sendTextMessage("555-5555", null, "Oi", null, null);
• É possível também dividir a mensagem em
várias partes
ArrayList<String> msgs =
smsMgr.divideMessage("Mensagem Grande");
smsMgr.sendMultipartTextMessage("555-5555", null, msgs,
null, null);
Recebendo Mensagens
• O Android pode notificar as aplicações
interessadas quando uma mensagem de texto
é recebida
• Um broadcast é enviado
• android.provider.Telephony.SMS_RECEIVED
• Basta registrar um broadcast receiver
• Também é preciso declarar uma permissão
<uses-permission
android:name="android.permission.RECEIVE_SMS" />
Broadcast Receiver
• É possível registrar um broadcast receiver para
ser executado quando uma mensagem chega
<receiver android:name=".SMSListener">
<intent-filter>
<action
android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
6
Broadcast Receiver
public class SMSListener extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
for (int i = 0; i < pdus.length; i++) {
SmsMessage sms = SmsMessage.createFromPdu((byte[]) pdus[i]);
String remetente = sms.getOriginatingAddress();
String texto = sms.getMessageBody();
}
}
}
}
Colocando em Prática...
Agora que você já
aprendeu a teoria,
acesse as vídeo-aulas
práticas e pratique os
assuntos abordados
neste módulo!
Clique aqui para acessar as vídeo-aulas práticas

Más contenido relacionado

Destacado

Destacado (12)

Top 8 human services worker resume samples
Top 8 human services worker resume samplesTop 8 human services worker resume samples
Top 8 human services worker resume samples
 
Tent design3
Tent design3Tent design3
Tent design3
 
Guia para el examen
Guia para el examenGuia para el examen
Guia para el examen
 
MOVETE 2015
MOVETE 2015MOVETE 2015
MOVETE 2015
 
LM Windpower Blade India Pvt Ltd
LM Windpower Blade India Pvt LtdLM Windpower Blade India Pvt Ltd
LM Windpower Blade India Pvt Ltd
 
Licencias creative commons
Licencias creative commonsLicencias creative commons
Licencias creative commons
 
Loe boe
Loe boeLoe boe
Loe boe
 
Trabalho do lixoinêsp
Trabalho  do  lixoinêspTrabalho  do  lixoinêsp
Trabalho do lixoinêsp
 
Initial ideas music vid a2
Initial ideas   music vid a2Initial ideas   music vid a2
Initial ideas music vid a2
 
bkvalve Knife gate valve 2014
bkvalve Knife gate valve 2014 bkvalve Knife gate valve 2014
bkvalve Knife gate valve 2014
 
Contexto global y regional de la educación superior en américa latina y el ca...
Contexto global y regional de la educación superior en américa latina y el ca...Contexto global y regional de la educación superior en américa latina y el ca...
Contexto global y regional de la educación superior en américa latina y el ca...
 
Reflexió2ana (5)
Reflexió2ana (5)Reflexió2ana (5)
Reflexió2ana (5)
 

Telefonia

  • 1. 1 Android API de Telefonia e SMS Tópicos Abordados • Telefonia • Fazendo ligações • Telephony Manager • Trabalhando com eventos do telefone • SMS • Enviar mensagens de texto • Receber mensagens de texto Fazendo Ligações • Para realizar uma ligação, basta enviar ao Android uma intent cuja action é ACTION_DIAL, com uma URI que representa o número a ser discado Uri uri = Uri.parse("tel:555-3344"); Intent i = new Intent(Intent.ACTION_DIAL, uri); startActivity(i);
  • 2. 2 Fazendo Ligações • Uma alternativa é usar a intent ACTION_CALL • Faz a discagem direta, sem confirmação • É preciso de declarar a permissão CALL_PHONE Uri uri = Uri.parse("tel:555-3344"); Intent i = new Intent(Intent.ACTION_CALL, uri); startActivity(i); <uses-permission android:name="android.permission.CALL_PHONE" /> Telephony Manager • Permite acessar as propriedades do telefone TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); • É preciso de permissão para ler as propriedades do telefone <uses-permission android:name="android.permission.READ_PHONE_STATE" /> Métodos Importantes Método Descrição Retorno getPhoneType() Tipo do telefone PHONE_TYPE_CDMA PHONE_TYPE_GSM PHONE_TYPE_NONE getDataActivity() Atividade de transferência de dados DATA_ACTIVITY_IN DATA_ACTIVITY_OUT DATA_ACTIVITY_INOUT DATA_ACTIVITY_NONE getDataState() Estado da conexão de dados DATA_CONNECTED DATA_CONNECTING DATA_DISCONNECTED DATA_SUSPENDED getSimState() Estado do cartão SIM do aparelho SIM_STATE_ABSENT SIM_STATE_NETWORK_LOCKED SIM_STATE_PIN_REQUIRED SIM_STATE_PUK_REQUIRED SIM_STATE_UNKNOWN SIM_STATE_READY
  • 3. 3 Métodos Importantes Método Descrição Retorno getNetworkType() Tipo da rede de conexão NETWORK_TYPE_1xRTT NETWORK_TYPE_CDMA NETWORK_TYPE_EDGE NETWORK_TYPE_EVDO_0 NETWORK_TYPE_EVDO_A NETWORK_TYPE_EVDO_B NETWORK_TYPE_GPRS NETWORK_TYPE_HSDPA NETWORK_TYPE_HSPA NETWORK_TYPE_HSUPA NETWORK_TYPE_IDEN NETWORK_TYPE_UMTS NETWORK_TYPE_UNKNOWN Recebendo Eventos do Telefone • Sua aplicação pode ser notificada a respeito de mudanças que ocorrem com relação à telefonia • Mudança na força do sinal • Telefone tocando • Tráfego de dados • etc. • Para receber os eventos, é necessário invocar o método listen() e passar uma instância de PhoneStateListener Exemplo de Registro de Evento • O primeiro passo é criar uma subclasse de PhoneStateListener PhoneStateListener listener = new PhoneStateListener() { public void onCallStateChanged(int state, String incomingNumber) { if (state == TelephonyManager.CALL_STATE_RINGING) { //fazer alguma coisa } } public void onSignalStrengthsChanged(SignalStrength strength) { int nivel = strength.getGsmSignalStrength(); //fazer alguma coisa } };
  • 4. 4 Exemplo de Registro de Evento • Depois basta registrar o interesse em ser notificado através do método listen() do objeto TelephonyManager | tm.listen(listener, PhoneStateListener.LISTEN_CALL_STATE | PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); Usar o OR binário para indicar em quais eventos há o interesse Para cada método sobrescrito existe uma constante correspondente tm.listen(listener, PhoneStateListener.LISTEN_NONE); Remove os listeners Enviando SMS • A maneira mais simples de enviar SMS no Android é utilizar a própria aplicação nativa de envio de SMS • Basta utilizar uma intent Uri uri = Uri.parse("sms:555-5555"); Intent i = new Intent(Intent.ACTION_SENDTO, uri); i.putExtra("sms_body", "Mensagem SMS"); startActivity(i); A Classe SMSManager • Ao invés de utilizar a aplicação nativa do Android para enviar SMS, também é possível utilizar a classe SMSManager. • É preciso definir uma permissão SmsManager smsMgr = SmsManager.getDefault(); <uses-permission android:name="android.permission.SEND_SMS" />
  • 5. 5 Enviando uma Mensagem de Texto • O método sendTextMessage() é usado smsMgr.sendTextMessage("555-5555", null, "Oi", null, null); • É possível também dividir a mensagem em várias partes ArrayList<String> msgs = smsMgr.divideMessage("Mensagem Grande"); smsMgr.sendMultipartTextMessage("555-5555", null, msgs, null, null); Recebendo Mensagens • O Android pode notificar as aplicações interessadas quando uma mensagem de texto é recebida • Um broadcast é enviado • android.provider.Telephony.SMS_RECEIVED • Basta registrar um broadcast receiver • Também é preciso declarar uma permissão <uses-permission android:name="android.permission.RECEIVE_SMS" /> Broadcast Receiver • É possível registrar um broadcast receiver para ser executado quando uma mensagem chega <receiver android:name=".SMSListener"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>
  • 6. 6 Broadcast Receiver public class SMSListener extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); if (bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); for (int i = 0; i < pdus.length; i++) { SmsMessage sms = SmsMessage.createFromPdu((byte[]) pdus[i]); String remetente = sms.getOriginatingAddress(); String texto = sms.getMessageBody(); } } } } Colocando em Prática... Agora que você já aprendeu a teoria, acesse as vídeo-aulas práticas e pratique os assuntos abordados neste módulo! Clique aqui para acessar as vídeo-aulas práticas