Tutorial Android #21 – Notificações

Olá pessoal! No último post vimos como utilizar alarmes em nossos aplicativos utilizando o AlarmManager. Porém, o alarme que definimos era exibido em tela cheia e, talvez, isso nem sempre é interessante. No tutorial de hoje, vamos adicionar a opção para o caso do usuário preferir uma notificação simples em vez de exibir ela em tela cheia.

O primeiro passo é adicionarmos mais essa opção no menu de opções. Assim, edite o arquivo preferencias.xml para adicionar um novo CheckBoxPreference.

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"&gt;
<ListPreference
android:key="listagem"
android:title="Modo de Listagem"
android:summary="Escolha o modo de listagem a ser utilizado"
android:entries="@array/nomes_ordenacao"
android:entryValues="@array/opcoes_ordenacao"
android:dialogTitle="Escolha o modo de listagem" />
<CheckBoxPreference
android:key="alarme"
android:title="Tocar Alarme no Almoço"
android:summary="Marque se deseja ser informado sobre a hora do almoço" />
<net.rafaeltoledo.restaurante.PreferenciaHorario
android:key="horario_alarme"
android:title="Horário do Alarme do Almoço"
android:defaultValue="12:00"
android:summary="Configure seu horário desejado para o alarme"
android:dependency="alarme" />
<CheckBoxPreference
android:key="usar_notificacao"
android:title="Ativar Notifocação"
android:defaultValue="true"
android:summary="Marque caso deseje um ícone na barra de status, ou desmarque para a notificação em tela cheia"
android:dependency="alarme" />
</PreferenceScreen>
view raw snippet01.xml hosted with ❤ by GitHub

Por fim, vamos editar o método onReceive da classe ReceptorAlarme para realizar a exibição da notificação, caso esta opção esteja selecionada.

@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences preferencias = PreferenceManager.getDefaultSharedPreferences(context);
boolean usarNotificacao = preferencias.getBoolean("usar_notificacao", true);
if (usarNotificacao) {
NotificationManager gerenciador = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification nota = new Notification(R.drawable.notificacao, "Hora do Almoço!", System.currentTimeMillis());
PendingIntent i = PendingIntent.getActivity(context, 0, new Intent(context, AlarmeActivity.class), 0);
nota.setLatestEventInfo(context, "Lista de Restaurantes", "Hora do Almoço! Está com fome?", i);
nota.flags |= Notification.FLAG_AUTO_CANCEL;
gerenciador.notify(ID_NOTIFICACAO, nota);
} else {
Intent i = new Intent(context, AlarmeActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(i);
}
}
view raw snippet02.java hosted with ❤ by GitHub

Para essa operação, será necessário adicionarmos um atributo na classe, que é basicamente um número único para diferenciar esta notificação de outras que, eventualmente, venhamos utilizar em nosso aplicativo.

O ícone referenciado no aplicativo é o ícone de notificação do GTalk, que pode ser obtido no diretório de instalação da SDK sob o nome de stat_notify_chat. Caso deseje utilizar outro, fique à vontade.

E pronto! Já temos nosso aplicativo funcionando. Configure o alarme e realize seus testes.

Como de costume, para baixar o projeto, basta clicar aqui. Até logo! 🙂