Esse aplicativo tem uma mecânica bem simples: cadastrar seus amigos separando-os por times e depois enviar SMS em massa para todos. Só que ao invés de escolher um amigo, você escolhe um time para enviar.
Vamos para a prática!
A primeira coisa foi definir a mecânica das interfaces para o aplicativo. Nesse caso, para deixar tudo bem separado. Criei todas as telas em xmls usando a própria lib do android.
Depois de montar os botões e todo o resto, criamos um arquivo xml chamado inicio.xml. Esse arquivo vai ser a tela inicial.
O xml inicial ficaria assim:
android:layout_width=”fill_parent”
android:layout_height=”fill_parent”
android:background=”@drawable/fundo”
android:orientation=”vertical” >
Aonde nós informamos um id para ele e setamos um fundo, logo em seguida vamos colocar alguns botões. Para colocar um botão:
<ImageView
android:id=”@+id/imageView3″
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:layout_alignParentLeft=”true”
android:onClick=”sms”
android:src=”@drawable/btnsms” />
Nesse caso inserimos um elemento dentro do layout, no qual informamos as propriedades, tamanho e tipo de obj.
Para simplificar este aplicativo resolvi criar um xml para cada interface, para não mudar sempre o mesmo xml. Isso deixa o aplicativo mais simples, porém ele fica um pouco pesado para o usuário final.
Feito o layout de todas as pages, vamos para o fonte.
Todo aplicativo Android tem uma classe principal que herda uma classe chamada “Activity”. Essa classe gera um processo no celular que fica rodando no aparelho do usuário. Ela tem um método chamado “onCreate”, que sempre vai ser executado quando o usuário inicia o aplicativo. Nele colocaremos tudo o que precisamos para rodá-lo. Então, como estamos trabalhando com uma lista de amigos, vamos verificar se a lista existe e carregar.
No método "Carregar amigos", vamos ler a lista de amigos que gravamos em um arquivo texto no celular do usuário. Caso esse arquivo não exista, será necessário criá-lo. Caso contrário, apenas verificamos se tem algo nele e carregamos para a variável amigos.
public void carregarAmigos(){
FileInputStream fil = null;
try{
fil = new FileInputStream(this.FILENAMELISTA);
try {
if(fil.available()>1){
byte[] buf = new byte[1024];
try {
fil.read(buf);
} catch (IOException e) {
e.printStackTrace();
}
this.amigos = new String(new String(buf).trim().intern());
}
} catch (IOException e) {
e.printStackTrace();
}
}catch (FileNotFoundException e) {
e.printStackTrace();
}
}
Agora precisamos cadastrar nossos amigos de acordo com a tela que criamos.
Nessa tela vamos cadastrar o nome do time do amigo, o telefone e seu nome. Claro que este aplicativo poderia pegar os contatos do próprio aparelho do usuário, mas a intenção é trabalhar com escrita e busca no aparelho. Em um post futuro mostro como fazer essa adaptação.
Para cadastrar, criamos o método salvarTimeAmigo. Ele vai ser responsável por capturar os dados da interface e gravar no arquivo que criamos.
public void salvarTimeAmigo(View button){
final EditText campoNomeAmigo = (EditText) findViewById(R.id.nomeAmigo);
final EditText campoTelAmigo = (EditText) findViewById(R.id.telAmigo);
final EditText campoTimeAmigo = (EditText) findViewById(R.id.timeAmigo);
if(this.amigos.equals(“”)){
this.amigos = campoNomeAmigo.getText().toString().trim()+”;”+campoTelAmigo.getText().toString().trim()+”;”+campoTimeAmigo.getText().toString().trim();
}else{
this.amigos = this.amigos+”-”+campoNomeAmigo.getText().toString().trim()+”;”+campoTelAmigo.getText().toString().trim()+”;”+campoTimeAmigo.getText().toString().trim()+”-”;
}
FileOutputStream fos = null;
try {
fos = openFileOutput(this.FILENAMELISTA, Context.MODE_PRIVATE);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
fos.write(this.amigos.getBytes());
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
this.agenda(button);
setContentView(R.layout.inicio);
}
Notem que logo depois de salvar os dados, chamamos “setContentView(R.layout.inicio);”. Com essa chamada carregamos a interface inicio.xml, e dessa maneira voltamos para a tela principal da aplicação.
Depois dos amigos cadastrados, agora vamos enviar o sms para os amigos.
Para enviar o SMS, precisamos de uma operadora. Para isso, conheço apenas duas opções: fazer algum acordo para usar um sistema delas ou usar o BlueVia. Nesse caso vamos usar a segunda opção.
Nesse post não irei me aprofundar muito a respeito de como o BlueVia funciona. Mas irei explicar o que precisamos para usá-lo.
Para usar o BlueVia, precisamos nos cadastrar no site: http://www.bluevia.com/. Através dele geramos um ticket e um hash para usar a rede de celular, e agora é só baixar a API para Android e implementar nesta aplicação.
Ao pressionar o botão enviar, a nossa classe principal captura os dados dessa interface e envia para a classe SMS. A mesma se conecta com o BlueVia e manda os dados para envio.
Ao iniciar a classe SMS, iniciamos a conexão no construtor dela:
String token = requestToken.getToken();
String secret = requestToken.getSecret();
String verifier = “000000″;
Token accessToken = new Token(token,secret);
this.smsClient = new BlueviaSmsMTClient(context, Mode.LIVE, “token”,”key”, accessToken);
} catch (BlueviaClientException e1) {
e1.printStackTrace();
}
Depois de iniciar a conexão, a nossa classe principal chama o método SMS.enviar, aonde enviamos o SMS para a lista de cliente e para o mesmo time.
SmsMessage sms = new SmsMessage();
sms.setMessage(this.getMsg());
String[] celulares = this.numeros.split(“,”);
for(int i=0;i<celulares.length;i++){
sms.addAddress(new UserId(Type.PHONE_NUMBER,celulares[i]));
}
try {
this.smsClient.sendSms(sms);
} catch (BlueviaClientException e) {
e.printStackTrace();
}
Logo depois da classe principal executar essa ação, voltamos para a tela inicial e esperamos a próxima interação do usuário.
Deixo aqui disponível o fonte completo para download.
Richard Brochini, trabalha a 8 anos com desenvolvimento de projetos para TI. Vencedor da categoria Jogos Mobile na SBGames 2008, ganhador do prêmio Porto Seguro como melhor jogo on-line, vencedor de melhor jogo feito para Tv Digital da TOTVz, dentre outras competições. Formado em Ciência Da Computação pela Universidade Anhembi Morumbi ,Certificado pela Impacta Tecnologia. Procura sempre aprender novas tecnologias, com esse diferencial, está sempre capacitado para atender os principais projetos da área. Hoje em dia está muito empolgado com a onda Smart Watch e já desenvolveu alguns protótipos.
Para entrar em contato: Richard@brochini.com