SMS Short Message Service
A API Telephony do Android permite monitorar e gerenciar Conexão de Dados, Entrada e Saída de Chamadas, Envio e recebimento de mensagens SMS.
É possível criar o próprio Cliente de SMS, substituindo a aplicação nativa ou construir aplicativos que se comuniquem via SMS. SMS Manager é responsável por possibilitar a reescrita completa de uma aplicação nativa como a de SMS.
SMS em Aplicações Contras Comparado ao uso de IP, o uso de SMS para transmitir dados entre aplicações é baixo; Forma de comunicação cara; Não indicado para sistemas que requerem real-time e que sejam responsivos. Prós Adoção de redes SMS faz com que seja uma alternativa para entrega de conteúdos não android; Reduz a dependências de servidores de terceiros.
Enviando SMS pelo Cliente Nativo Android Disparar Activity com a intenção Intent.ACTION_SENDTO Data sms: numero Extra sms_body: mensagem
Intent smsintent = new Intent(Intent.ACTION_SENDTO, Uri.parse("sms:55512345")); smsintent.putextra("sms_body", "Press send to send me"); startactivity(smsintent); SMS Project SMSActivity.java
Implementando o próprio envio de SMS s android.telephony.smsmanager SmsManager smsmanager = SmsManager.getDefault(); String numero = 98502166 ; String mensagem = Olá, Estou te enviando essa msg... ; smsmanager.sendtextmessage(numero, null, mensagem, null, null); <uses-permission android:name="android.permission.send_sms"/>
Tratando Envio e Entrega de SMS s sendtextmessage (String destinationaddress, String scaddress, String text, PendingIntent sentintent, PendingIntent deliveryintent); Parametro Descrição Tipo destinationaddress Endereço do destino String scaddress Endereço central do serviço de rede, por padrão é utilizado null para utilizar SMSC. String text Mensagem a ser enviada String sentintent Broadcast de quando a mensagem é enviada ou o envio falhou deliveryintent Broadcast indicando quando a mensagem é entregue ao destino PendingIntent PendingIntent
String SENT = "SENT_SMS_ACTION"; String DELIVERED = "DELIVERED_SMS_ACTION"; SMS Project PendingIntent sentpi = PendingIntent.getBroadcast(SMSActivity.this, 0, new Intent(SENT), 0); PendingIntent deliveredpi = PendingIntent.getBroadcast( SMSActivity.this, 0, new Intent(DELIVERED), 0); SMSActivity.java
registerreceiver(new BroadcastReceiver() { @Override public void onreceive(context arg0, Intent arg1) { switch (getresultcode()) { case Activity.RESULT_OK: Toast.makeText(SMSActivity.this, "SMS sent, Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(SMSActivity.this, "Generic failure, Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NO_SERVICE: Toast.makeText(SMSActivity.this, "No service, Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_NULL_PDU: Toast.makeText(SMSActivity.this, "Null PDU, Toast.LENGTH_SHORT).show(); break; case SmsManager.RESULT_ERROR_RADIO_OFF: Toast.makeText(getBaseContext(), "Radio off, Toast.LENGTH_SHORT).show(); break;, new IntentFilter(SENT)); SMSActivity.java
registerreceiver(new BroadcastReceiver() { @Override public void onreceive(context arg0, Intent arg1) { switch (getresultcode()) { case Activity.RESULT_OK: Toast.makeText(SMSActivity.this, "SMS delivered, Toast.LENGTH_SHORT).show(); break; case Activity.RESULT_CANCELED: Toast.makeText(SMSActivity.this, "SMS not delivered, break;, new IntentFilter(DELIVERED)); Toast.LENGTH_SHORT).show(); SMSActivity.java
Enviar passando os objetos PendingIntents SmsManager sms = SmsManager.getDefault(); sms.sendtextmessage(numero, null, mensagem, sentpi, deliveredpi); SMSActivity.java
Ouvindo recebimento de SMS s Todas as vezes que um SMS é recebido, um novo broadcast Intent é disparado com a ação: android.provider.telephony.sms_received Detalhes da mensagem Extração do PDU para obter os dados
SMS Project <uses-permission android:name="android.permission.receive_sms /> <receiver android:name=.smsreceiver" > <intent-filter> <action android:name="android.provider.telephony.sms_received" /> </intent-filter> </receiver> AndroidManifest.xml
public class SMSReceiver extends BroadcastReceiver { @Override public void onreceive(context context, Intent intent) { if (intent.getaction().equals(sms_received)) { Bundle bundle = intent.getextras(); if (bundle!= null) { Object[] pdus = (Object[]) bundle.get("pdus"); SmsMessage[] messages = new SmsMessage[pdus.length]; for (int i = 0; i < pdus.length; i++) messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); for (SmsMessage message : messages) { String msg = message.getmessagebody(); String from = message.getoriginatingaddress(); Log.i(SMSReceiver.class.getName(),"Mensagem: "+ msg); Log.i(SMSReceiver.class.getName(),"De: "+ from); SMSReceiver.java
Refatorando o código private SmsMessage[] getmessagefromintent(intent intent) { Bundle bundle = intent.getextras(); if (bundle!= null) { Object[] pdus = (Object[]) bundle.get("pdus"); SmsMessage[] messages = new SmsMessage[pdus.length]; for (int i = 0; i < pdus.length; i++) messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); return messages; return null; SMSReceiver.java
Refatorando o código private SmsMessage getmessage(intent intent){ SmsMessage[] mensagens = getmessagefromintent(intent); if (mensagens!= null){ return mensagens[0]; return null; SMSReceiver.java
Software Auto-Response Possibilitar o Envio de SMS s; Ao receber um SMS, enviar um SMS de resposta com a mensagem Estou Ocupado, Logo mais te ligo. Ass: Seu Nome.