Criando Notificações no Android


Boa noite!!

Hoje vou falar um pouco sobre Notificações.
Elas são utilizadas pois, em geral, uma aplicação que esteja executando em segundo plano não deve exibir um alerta para o usuário, ou abrir uma tela, pois ele pode estar em uma ligação, ou em qualquer outra aplicação, e isso o atrapalharia.
Para essa finalidade o Android tem a classe Notification (android.app.Notification), que serve para enviar notificações que aparecem na barra de status do telefone, podendo inclusive fazer o celular vibrar ou acender as luzes.

Bom, vamos à prática para exemplificar melhor sua utilização. Criem um projeto ExemploNotificacao que conterá as duas seguintes Activities:

public class ExemploCriaNotificacao extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        TextView text = new TextView(this);
        text.setText("Notificação disparada.");
        setContentView(text);

        // Texto que aparecerá na barra de status (chamada para a notificação)
        String tickerText = "Você recebeu uma mensagem.";

        // Detalhes da notificação
        CharSequence titulo = "André";
        CharSequence mensagem = "Exemplo de notificação";

        // Exibe a notificação
        criarNotificacao(this, tickerText, titulo, mensagem, ExemploExecutaNotificacao.class);
    }

    // Exibe a notificacao
    protected void criarNotificacao(Context context, CharSequence mensagemBarraStatus,
            CharSequence titulo, CharSequence mensagem, Class activity) {
        // Recupera o serviço do NotificationManager
        NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        Notification n = new Notification(R.drawable.chat, mensagemBarraStatus, System.currentTimeMillis());

        // PendingIntent para executar a Activity se o usuário selecionar a notificação
        PendingIntent p = PendingIntent.getActivity(this, 0, new Intent(this, activity), 0);

        // Flag utilizada para remover a notificação da barra de status
        // quando o usuário clicar nela
        n.flags |= Notification.FLAG_AUTO_CANCEL;

        // Informações
        n.setLatestEventInfo(this, titulo, mensagem, p);

        // Espera 100ms e vibra por 250ms, espera por mais 100ms e vibra por 500ms
        n.vibrate = new long[] { 100, 250, 100, 500 };

        // id da notificacao
        nm.notify(R.string.app_name, n);
    }

}

public class ExemploExecutaNotificacao extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        nm.cancel(R.string.app_name);
        TextView text = new TextView(this);
        text.setText("Usuário selecionou a notificação");
        setContentView(text);
    }

}

Não esqueça de adicionar ao AndroidManifest a Activity adicional e a permissão para o celular vibrar:
<uses-permission android:name="android.permission.VIBRATE" />
<activity android:name="br.com.blogspot.androidandrekunde.ExemploExecutaNotificacao" />
Vejamos como ficou a aplicação:




Assim que possível eu atualizo o post com o link para download do projeto.

Sobre o autor

André Luís Batista Kunde
Técnico em Informática (2004), Bacharel em Administração com ênfase em Marketing (2009), buscando ser Engenheiro de Software, Trabalhando com software educacional e me aventurando pelo mundo da programação mobile.

3 comentários:

  1. nossa cara to amando seu site, de verdade. Pra quem ta começando ele ajuda pra caramba...
    vc podia ajudar mostrando também como excluir o cadastro de um contato da agenda que ensinou no SQLite. pode fazer isso? ...Disponibiliza pra download.

    PS: Gostei demais do site;

    ResponderExcluir
  2. Boa dia no meu não funcionou dando erro na setLatestEventInfo

    ResponderExcluir
  3. você pode me enviar o projeto para testes??

    ResponderExcluir

Copyright © 2013 Aprendendo Android and Blogger Themes.