Telefonia

98 visualizações

Publicada em

informações sobre sistema de telefonia e sms

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
98
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
1
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Telefonia

  1. 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. 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. 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. 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. 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. 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

×