Upload
pablo-souza
View
5
Download
0
Embed Size (px)
Citation preview
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 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
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() é 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>
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