Este é um post disponível para assinantes MVPMensagens SMS em aplicações Desktop com Java SE e Java ME - Artigo webMobile 35
Este artigo apresenta uma alternativa para envio de mensagens SMS a partir de aplicativos Desktop, sem a burocracia das operadoras, sem contratos. Na arquitetura proposta, um aplicativo Java SE com acesso a banco de dados formata mensagens SMS e envia, via Bluetooth, essas mensagens para um aparelho celular, o qual roda uma aplicação Java ME. Ao receber a mensagem Bluetooth, o programa para celular formata uma mensagem SMS e envia aos destinatários.
[Artigo já está disponível no Leitor Digital DevMedia®. Clique aqui para acessá-lo]
> Clique aqui para ler todos os artigos da Mobile magazine 35
A sociedade moderna exige que as pessoas estejam conectadas constantemente com objetivo de que as informações sejam compartilhadas de forma rápida, isso incluindo a comunicação pessoa a pessoa, empresa a pessoa ou empresa a empresa.
Essa comunicação iniciou com a necessidade das pessoas manterem contato umas com as outras sem se preocuparem com a distância. Contudo, devido ao constante avanço tecnológico, já não trata simplesmente do contato mantido entre dois ou mais indivíduos. A necessidade atual é facilitar e baratear ao máximo esta comunicação.
Uma forma de permitir a comunicação entre pessoas com baixo custo é o envio de mensagens de texto curtas, também conhecidas por SMS (Short Message Service).
Os celulares existentes hoje no mercado permitem, além das funcionalidades tradicionais de realizar e receber ligações, o envio e a recepção de SMS. Entretanto, esse recurso é exclusivo dos aparelhos celulares. Outras plataformas, como Web ou desktop, para poderem enviar SMS necessitam de um acordo com alguma operadora de celular que oferecerá este serviço. Porém, esse processo pode ser burocrático e pode se transformar em um esforço desproporcional, principalmente se o usuário deseja utilizar o envio de mensagem esporadicamente.
A alternativa apresentada nesse artigo para o envio de mensagens SMS a partir de aplicações Desktop utiliza o serviço tradicional de envio de SMS existente nos aparelhos celulares. Na arquitetura proposta, estes receberiam de um aplicativo Desktop via mensagem Bluetooth um texto curto (160 caracteres) e um número, que por sua vez serão utilizados para o envio do SMS.
A única limitação dessa arquitetura é a necessidade de crédito no aparelho celular que recebe dados via Bluetooth, permitindo com isso o envio de mensagens SMS. Não existe quantidade mínima ou máxima de mensagens, ao contrário dos contratos das operadoras, nessa arquitetura o usuário só pagará pelas mensagens enviadas, ao preço de mercado por mensagem.
Para o desenvolvimento dos aplicativos propostos, será utilizada a IDE de desenvolvimento Netbeans, versão 6.9 full, a qual possui ferramentas que facilitam o desenvolvimento de aplicações Desktop e Mobile. Para o banco de dados utilizado no exemplo, foi optado pelo Apache Derby (ou JavaDB), presente na versão full do Netbeans (ler Nota DevMan 1).
Arquitetura do aplicativo proposto
Para o funcionamento da arquitetura proposta, será necessário o desenvolvimento de dois aplicativos específicos. Um aplicativo desktop, de agora em diante referenciado com “aplicativo servidor”, e um aplicativo celular, chamado de “cliente”. Este último enviará as mensagens de texto aos celulares destinatários, conforme estrutura apresentada na Figura 1.
Assim, o aplicativo servidor, que terá acesso a um banco de dados com telefones e mensagens, enviará essas informações via Bluetooth para o aplicativo móvel, que por sua vez enviará o SMS aos aparelhos destinatários, debitando do seu crédito os custos de cada mensagem enviada.
Desenvolvimento do aplicativo Servidor
O aplicativo servidor sugerido para este artigo é uma agenda de eventos, este desenvolvido com a tecnologia Java SE. Essa agenda recebe os dados dos eventos, sendo eles, nome, data e hora do evento e um número de celular para o envio de um SMS. Esse SMS será enviado apenas na hora do evento.
Inicialmente, antes de desenvolver o aplicativo servidor, é necessário criar o banco de dados utilizado pelo programa. Para isso, dentro da IDE Netbeans, acesse a Categoria Serviços, clicando com o botão direito sobre a opção JavaDB, deve-se escolher a opção Criar Banco de Dados, conforme Figura 2.
Na janela apresentada, deve-se informar o nome do banco de dados, bem como o usuário e a senha de acesso. Para o exemplo será utilizado nome Agenda, usuário de acesso “root” e a senha “root”. Por fim, pode-se concluir a criação do banco.
Feito isto, é necessário conectar no banco de dados, clicando com o botão direito sobre ele e escolhendo a opção Conectar – Figura 3. Assim, é possível executar comandos dentro do banco.
Após isso, clicando novamente com o botão direito sobre o banco, deve-se escolher a opção Executar Comando, que abrirá uma console para comandos SQL (comandos de tratamento de banco de dados). Nessa console deve ser digitado o código abaixo, que fará a criação de uma tabela chamada agenda, com seus respectivos campos – Listagem 1.
Listagem 1. Comando SQL para a criação da tabela Agenda.
01. CREATE TABLE ROOT.AGENDA (
02. COD NUMERIC,
03. DATA VARCHAR (10),
04. HORA VARCHAR (8),
05. EVENTO VARCHAR (160),
"
ATENÇÃO! A exibição deste artigo foi interrompida.
Este é um post disponível para assinantes MVP

Listagem 2. VerificandoBDThread - Conexão com o Banco de dados
1. private class VerificandoBDThread extends Thread {
2.
3. public void run() {
4.
5. try {
6. Class.forName("org.apache.derby.jdbc.ClientDriver");
7. String url = "jdbc.derby://localhost.1527/Agendaa";
8. String user = "root";
9. String pass = "root";
10.
11. Connection con = DriverManager.getConnection
(url, user, pass);
12. Statement stmt = con.createStatement();
13.
14. while (true) {
15. long tempoIni = System.currentTimeMillis();
16. if (dispositivoRemoto != null) {
17. Calendar cal = Calendar.getInstance();
18. int diaAtual = cal.get(Calendar.DAY_OF_MONTH);
19. int mesAtual = (cal.get(Calendar.MONTH) + 1);
20. int anoAtual = cal.get(Calendar.YEAR);
21. int horaAtual = cal.get(Calendar.HOUR_OF_DAY);
22. int minutoAtual = cal.get(Calendar.MINUTE);
23.
24. ResultSet rs = stmt.executeQuery
("SELECT * FROM ROOT.AGENDA");
25. while (rs.next()) {
26. int codigo = rs.getInt("codigo");
27. String data = rs.getString("data");
28. String hora = rs.getString("hora");
29. String evento = rs.getString("evento");
30. String telefone = rs.getString("telefone");
31.
32. String dataParte[] = data.split("/");
33. int diaBd = Integer.parseInt(dataParte[0]);
34. int mesBd = Integer.parseInt(dataParte[1]);
35. int anoBd = Integer.parseInt(dataParte[2]);
36.
37. String horaParte[] = hora.split(".");
38. int horaBd = Integer.parseInt(horaParte[0]);
39. int minutoBd = Integer.parseInt(horaParte[1]);
40.
41. if (diaAtual == diaBd && mesAtual ==
mesBd && anoAtual == anoBd) {
42. if (horaAtual == horaBd && minutoAtual == minutoBd) {
43. enviarMensagemCelular(telefone, evento);
44. }
45. }
46.
47. long tempoFim = System.currentTimeMillis();
48. long tempoExecucao = tempoFim - tempoIni;
49. Thread.sleep((60 * 1000) - tempoExecucao);
Este também esta incomplento
Listagem 5. Thread responsável para disponibilização de um serviço Bluetooth.
1: private class ConexaoBluetoothThread extends Thread {
2: String nomeServico = "WebMobileRFCOMM";
3: public void run() {
4: String url = "btspp://localhost:" + uuid.toString() + ";name=" +
5. nomeServico;
6: conexaoServidorStream = (StreamConnectionNotifier)
Connector.open(url);
7: ServiceRecord template = dispositivo.getRecord
(conexaoServidorStream);
8: template.setAttributeValue(0x0008, new DataElement
(DataElement.U_INT_1,
9. 0xFF));
10. template.setDeviceServiceClasses(SERVICE_MOBILE);
11.
12. StreamConnection conexao = conexaoServidorStream.
acceptAndOpen();
13. RemoteDevice dispositivoRemoto = RemoteDevice.
getRemoteDevice(conexao);
14. saida = conexao.openDataOutputStream();
15. entrada = conexao.openDataInputStream();
os códigos estão incomplentos
em 21/4/2011 12:51 - Responder


em 21/4/2011 23:58 - Responder


em 25/4/2011 14:47 - Responder

código-fonte
0
0
