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

Telefonia

  • 1.
    1 Android API de Telefoniae 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 • Umaalternativa é 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çãoRetorno 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 Registrode 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 Mensagemde 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 classSMSListener 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