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"> | |
<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> |
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); | |
} | |
} |
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! 🙂