Tutorial Android #21 – Notificações

Padrão

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.

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

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<br />
public void onReceive(Context context, Intent intent) {<br />
	SharedPreferences preferencias = PreferenceManager.getDefaultSharedPreferences(context);<br />
	boolean usarNotificacao = preferencias.getBoolean(&quot;usar_notificacao&quot;, true);</p>
<p>	if (usarNotificacao) {<br />
		NotificationManager gerenciador = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);<br />
		Notification nota = new Notification(R.drawable.notificacao, &quot;Hora do Almoço!&quot;, System.currentTimeMillis());<br />
		PendingIntent i = PendingIntent.getActivity(context, 0, new Intent(context, AlarmeActivity.class), 0);<br />
		nota.setLatestEventInfo(context, &quot;Lista de Restaurantes&quot;, &quot;Hora do Almoço! Está com fome?&quot;, i);<br />
		nota.flags |= Notification.FLAG_AUTO_CANCEL;<br />
		gerenciador.notify(ID_NOTIFICACAO, nota);<br />
	} else {<br />
		Intent i = new Intent(context, AlarmeActivity.class);<br />
		i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);<br />
		context.startActivity(i);<br />
	}<br />
}

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! 🙂