6
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);

Telefonia

Embed Size (px)

Citation preview

Page 1: Telefonia

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);

Page 2: Telefonia

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 telefoneTelephonyManager 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 ImportantesMétodo Descrição Retorno

getPhoneType() Tipo do telefonePHONE_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

Page 3: Telefonia

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

}

};

Page 4: Telefonia

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" />

Page 5: Telefonia

5

Enviando uma Mensagem de Texto

• O método sendTextMessage() é usadosmsMgr.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>

Page 6: Telefonia

6

Broadcast Receiverpublic 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