O sistema de notificação do Android é uma maneira de informar os eventos importantes que aconteceram, a interface permite visualizar e interagir com a aplicação que gerou a notificação, no momento que for mais conveniente.
Para criar uma notificação no Android uma opção é usar a classe
NotificationCompat.Builder
para versões de Android a partir da API 4 (Android 1.6), e a classe Notification.Builder
a partir da API 11 (Android 3.0). No exemplo deste post e toda a descrição para criação de notificação foi utilizada a classe Notification.Builder.
O projeto foi desenvolvido para exibir notificação nos dispositivos com Android versão 4.1 ou superior.Como Criar a Notificação
Para criar uma notificação em dispositivos com API 11 ou superior, é necessário instanciar a classe aNotification.Builder
, configurar os parâmetros obrigatórios e chamar o método build()
, que irá retornar um objeto tipo Notification
.O objeto
Notification
deve ter no mínimo:- Um ícone
- Um título
- Um texto para notificação
Na classe
Notification
a ação é definida através da classe PendingIntent,
que retorna um objeto Intent
e pode inicializar uma Activity
.A classe
Notification
permite definir um nível de prioridade no qual a notificação é exibida, comparada com outras notificações, o que garante que as notificações mais importantes sejam exibidas primeiro.Os nível de notificação possíveis são:
Notification.PRIORITY_DEFAULT
: Nível padrão de notificação, onde a prioridade não é definida.Notification.PRIORITY_HIGH
: Notificação de alta prioridade utilizada para fazer comunicações importantes, como por exemplo mensagens.Notification.PRIORITY_LOW
: Notificação de prioridade baixa, onde o usuário precisa ficar ciente, mas que não apresenta nenhuma urgência.Notification.PRIORITY_MAX
: Notificação considerada crítica ou urgente, que depende do fator tempo e deve ser resolvida antes de alguma outra tarefa.Notification.PRIORITY_MIN
: Notificação de prioridade mínima que o usuário precisa ficar ciente, mas não apresenta nenhuma urgência, como por exemplo previsão do tempo. As notificações com prioridade mínima não são apresentadas na barra de status, somente são visíveis quando o usuário acessa a bandeja de notificações.
Criando a Notificação
Para demonstrar como exibir uma notificação criei um projeto que avisa quando foi alterado o modo de conexão do dispositivo, de conexão normal para conexão modo avião ou vice versa. No modo avião o dispositivo não tem acesso ao sinal de telefone, rede e rádio.Quando o modo de conexão é alterado, uma notificação é exibida na barra de status do dispositivo. Esta notificação quando selecionada apresenta uma tela, com um texto explicando como verificar se o dispositivo está em modo avião.
Para este exemplo criei duas classes no projeto da aplicação Android. A classe PrincipalActivity() utilizada para exibir a tela com o texto explicativo do modo de conexão, e a classe IniciarAplicaçao() utilizada para criar a notificação e definir qual a Activity será exibida quando a notificação for selecionada.
Para verificar se o modo de conexão foi alterado utilizei um
BroadcastReceiver
que foi registrado na ação android.intent.action.AIRPLANE_MODE.
Para ver um exemplo completo de como criar e utilizar um BroadcastReceiver acesse o post Utilizando BroadcastReceiver para Iniciar uma Aplicação.O registro do
BroadcastReceiver
foi feito no arquivo AndroidManifest.xml. Este código deve ser inserido dentro da tag <application/>
.<!-- Publicação do Broadcast --> <receiver android:name=".IniciarAplicacao"> <intent-filter> <action android:name="android.intent.action.AIRPLANE_MODE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver>A classe IniciarAplicacao() que foi registrada no arquivo AndroidManifest.xml estende a classe
BroadcastReceiver e
sobrescreve o método onReceive()
, que é executado no momento em que o modo de conexão do dispositivo é alterado. Este método cria a notificação que será exibida na barra de status do dispositivo.public class IniciarAplicacao extends BroadcastReceiver {
public static final int ALTEROU_MODO_CONEXAO = 1;
@Override
public void onReceive(Context ctx, Intent i) {
// Cria a notificação com as informações de
// ícone, título, prioridade e texto
Notification.Builder mBuilder =
new Notification.Builder(ctx)
.setSmallIcon(R.drawable.ic_notification_romar)
.setContentTitle("Modo avião")
.setPriority(Notification.PRIORITY_DEFAULT)
.setContentText("Foi alterado o modo de conexão do " +
"celular.");
// Cria o intent que vai ser chamado quando a notificação
// for selecionada. Neste caso exibe a Activity PrincipalActivity
Intent resultIntent = new Intent(ctx, PrincipalActivity.class);
// Cria uma pilha de tarefas para garantir que a navegação a
// partir da Activity chamada pela notificação, retorne para
// a tela principal do Android, quando selecionado o botão voltar
TaskStackBuilder stackBuilder = TaskStackBuilder.create(ctx);
stackBuilder.addParentStack(PrincipalActivity.class);
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent(
0,
PendingIntent.FLAG_UPDATE_CURRENT
);
mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
(NotificationManager) ctx.getSystemService
(Context.NOTIFICATION_SERVICE);
// A constante ALTEROU_MODO_CONEXAO é uma identificação
// que pode ser utilizada para atualizar a notificação posteriormente
mNotificationManager.notify(ALTEROU_MODO_CONEXAO, mBuilder.build());
}
}
Durante a criação da notificação é definido um
Intent
para que seja exibida uma Activity
, com as informações de como verificar se o dispositivo está em modo avião, portanto foi criada a classe PrincipalActivity(), cujo método onCreate(Bundle)
exibe a informação em um TextView
. @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_principal);
TextView textView = (TextView)findViewById(R.id.textview);
textView.setText("O modo de conexão do celular foi alterado. " +
"Se o ícone de conexão for um avião, o celular está " +
"sem sinal de telefone, rede e/ou rádio.");
}