quarta-feira, 15 de abril de 2015

Para ilustrar, vamos... Enviar um SMS!

No último post começamos a ver a estrutura do framework do Android e tivemos um contato inicial com o importante arquivo AndroidManifest.xml.

Vimos que, dentre outras, uma das finalidades deste arquivo é informar que permissões o nosso app utilizará.

Para exemplificar, vamos abrir o arquivo "MainActivity.java" em nosso projeto "meuPrimeiroApp" (localizado na pasta "src/com.example.meuprimeiroapp").

Logo no método "OnCreate" (que é o código executado assim que a tela abre no celular), após a linha "setContentView(R.layout.activity_main);", acrescente o texto abaixo:


      // Envia SMS
      SmsManager smsManager=SmsManager.getDefault();
      smsManager.sendTextMessage("99999-9999", null, "Este texto foi enviado por SMS", null, null);


Não se importe por enquanto em entender o que está acontecendo. Apenas copie o trecho acima (mudando o "99999-9999" para o seu número de celular) e cole na posição especificada. Você verá que o Eclipse vai reclamar da segunda linha, mostrando um "X" vermelho. Ao passar o mouse sobre esse "X" vermelho, verá a mensagem "SmsManager cannot be resolved to a type". Ou seja, ele não sabe dizer quem é "SmsManager".

Pra resolver, é simples: Clique com o botão esquerdo do mouse sobre o "X" vermelho e escolha a opção "Import 'SmsManager" (android.telephony)". Você verá que depois disso uma linha será acrescentada lá em cima no código, nos "imports": "import android.telephony.SmsManager;". À partir daí o "X" vermelho desaparecerá, pois agora nosso código sabe quem é "SmsManager".

Bem, agora pressione CTRL+S para salvar o arquivo. Tente executar o projeto (selecionando o nome do projeto no Package Explorer com o botão esquerdo do mouse e pressionando no botão de "play").

Você verá que ganharemos um erro, que será mostrado no "stack-trace" em letras vermelhas no LogCat:




A causa do erro aparece na frase sublinhada em azul: "Caused by: java.lang.SecurityException: Sending SMS message: User 10056 does not have android.permission.SEND_SMS".

Ou seja: Esquecemos de declarar a permissão para enviar SMS no AndroidManifest.xml!

Então, vamos lá!

Vamos abrir agora o arquivo AndroidManifest.xml e acrescentar a linha abaixo, antes da tag <application> :


<uses-permission android:name="android.permission.SEND_SMS"/>


Grave com CTRL+S e execute novamente o projeto! você perceberá que agora o envio do SMS funcionará, pois declaramos corretamente a permissão no arquivo AndroidManifest.xml, conforme o esperado pelo framework.

Este post visa demonstrar a importância do arquivo AndroidManifest.xml, bem como as exigências do framework, a fim de evitar problemas comuns que atingem o desenvolvedor iniciante, causando muitas vezes alguma frustração que poderia ter sido evitada.

Portanto, sempre que acrescentar alguma nova tela ou funcionalidade ao seu aplicativo, ou utilizar alguma ferramenta do hardware do celular ou alguma biblioteca ou método que exijam determinada versão do Android, lembrem que pode ser que seja necessário fazer alguma intervenção no arquivo AndroidManifest.xml para que funcione corretamente.

Divirta-se com seu envio de SMS e até a próxima! 

Nenhum comentário:

Postar um comentário