Escolar Documentos
Profissional Documentos
Cultura Documentos
Agenda
22 / 10 Email SMS (Short Message Service) XMPP (Extensible Messaging and Presence Protocol) LBS (Location-Based Services) 29 / 10 SIP PUSH Projeto
O e-mail provavelmente o servio mais utilizado da internet Associado a aplicativos de calendrio, contatos, endereos e lista de tarefas agrega muito valor aos servios de software corporativos Celulares e smartphones so por natureza dispositivos para acesso a servios de mensagens
Email . Arquitetura
Vantagens
- Abstrai bastante - No precisa de nenhuma biblioteca externa
Desvantagens
- No envia o email direto, abre o aplicativo padro de email
Provider
Adio de permisses
Authentication
Autenticao do usurio com servidor SMTP
Provider
public final class JSSEProvider extends Provider { public JSSEProvider() { super("HarmonyJSSE", 1.0, "Harmony JSSE Provider"); AccessController.doPrivileged(new java.security.PrivilegedAction<Void>() { public Void run() { put("SSLContext.TLS", "org.apache.harmony.xnet.provider.jsse.SSLContextImpl"); put("Alg.Alias.SSLContext.TLSv1", "TLS"); put("KeyManagerFactory.X509", "org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl"); put("TrustManagerFactory.X509", "org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl"); } return null;
});
Authentication
... static { Security.addProvider(new JSSEProvider()); } public GmailSender() { Properties props = new Properties(); props.setProperty("mail.transport.protocol", "smtp"); props.setProperty("mail.host", smtpHost); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.port", "465"); props.put("mail.smtp.socketFactory.port", "465"); props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); props.put("mail.smtp.socketFactory.fallback", "false"); props.setProperty("mail.smtp.quitwait", "false"); } ... session = Session.getDefaultInstance(props, this);
Authentication
... @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(user, pwd); } public synchronized void sendMail(String subject, String body, String recipients) { MimeMessage message = new MimeMessage(session); DataHandler handler = new DataHandler(new ByteArrayDataSource(body.getBytes(), "text/plain")); message.setSender(new InternetAddress(user)); message.setSubject(subject); message.setDataHandler(handler); if (recipients.indexOf(',') > 0) message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipients)); else message.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients)); Transport.send(message); }
Modificar a aplicao para enviar um email utilizando o segundo modo de envio de email
Em 2010, cerca de 6.1 trilhes de SMS foram enviados Tipos: Texto (160 caracteres de 7-bit) MMS Binrio Aplicaes:
MobileTicket
SMS . Envio
<uses-permission android:name="android.permission.SEND_SMS"/>
... SmsManager sms = SmsManager.getDefault(); sms.sendTextMessage(number, null, message, null, null); ...
sendTextMessage(destino, origem, mensagem, sentIntent, deliveryIntent) Onde: . sentIntent ir monitorar o envio da mensagem . deliveryIntent ir monitorar o recebimento da mensagem
http://mobiforge.com/developing/story/sms-messaging-android
SMS . Recebimento
<uses-permission android:name="android.permission.RECEIVE_SMS"> ... <receiver android:name="br.com.avaty.sms.receiver.SMSReceiver"> <intent-filter> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver>
... SmsManager sms = SmsManager.getDefault(); sms.sendTextMessage(number, null, message, null, null); ...
SMS . Recebimento
public class SMSReceiver extends BroadcastReceiver { private static final String SMS = "android.provider.Telephony.SMS_RECEIVED"; @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(SMS)) { Bundle b = intent.getExtras(); if (b != null) { Object[] pdus = (Object[]) b.get("pdus"); SmsMessage[] messages = new SmsMessage[pdus.length];
... } SmsManager sms = SmsManager.getDefault(); sms.sendTextMessage(number, null, message, null, null); if (messages.length > -1) { ... Log.i("idez", "Message recieved: " + messages[0].getMessageBody());
} } }
} }
SMS . Exerccio
Criar uma aplicao em Android, com um formulrio que envie um SMS para um nmero informado. Possibilitar o usurio da aplicao selecionar um nmero a partir da lista de contatos do telefone
SMS um excelente mecanismo de comunicao atravs de mensagens push. Mas a falta de interoperabilidade com redes TCP/IP limita a sua utilizao IM killer Porm as operadoras ainda relutam, SMS ainda mais lucrativo do que IM Palavra chave: interoperabilidade Precisamos de um protocolo que seja interopervel entre os diversos fabricantes e aplicativos
XMPP
XMPP
Conectar
private void connect() { ConnectionConfiguration config = new ConnectionConfiguration(ip,port); config.setSecurityMode(SecurityMode.disabled); config.setSASLAuthenticationEnabled(false); conn = new XMPPConnection(config); try { conn.connect(); conn.login(login, pwd); } catch (Exception e) { Message msg = new Message(); msg.what = XMPP_CONN_ERROR; msg.obj = e.getMessage(); handler.sendMessage(msg); } }
XMPP
Listar usurios
private void showUsers() { if (conn != null) { Roster roster = conn.getRoster(); Collection<RosterEntry> entries = roster.getEntries(); for (RosterEntry entry : entries) { Log.i("idez", entry.toString()); } } }
XMPP
Iniciar Chat
ChatManager chatManager = conn.getChatManager(); currentChat = chatManager.createChat(idez@localhost, // THIS CODE NEVER GETS CALLED FOR SOME REASON new MessageListener() { @Override public void processMessage(Chat chat, org.jivesoftware.smack.packet.Message msg) { }; } );
XMPP
Receber Mensagem
isTalking = true; // Accept only messages from friend PacketFilter filter = new AndFilter(new PacketTypeFilter(Message.class), new FromContainsFilter(friend)); // Collect these messages PacketCollector collector = conn.createPacketCollector(filter); while (isTalking) { Packet packet = collector.nextResult(); if (Message) { Message msg = (Message) packet; if (msg.getBody() != null) { Log.i(idez, msg.getBody()); } } }
XMPP
Enviar Mensagem
currentChat.sendMessage(msgArea.getText().toString());
Desconectar
conn.disconnect();
XMPP . Exerccio
Location-Based Services
Aplicaes
Location-Based Services
Location-Based Services
Formas de localizao:
ID de clula
Triangulao
Na maior parte do tempo o celular est na faixa de mais de uma torre de celular
GPS
Location-Based Services
Cuidados!!
Location-Based Services
LocationListener
... locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 10000, 0, this); ... @Override public void onLocationChanged(Location location) { } @Override public void onProviderDisabled(String provider) { } @Override public void onProviderEnabled(String provider) { } @Override public void onStatusChanged(String provider, int status, Bundle extras) { }
Location-Based Services