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.

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

3 comentários sobre “Tutorial Android #21 – Notificações

  1. Bom dia,

    Dentro deste código existe alguns problemas quanto à compilar e emular.
    Erro no FormularioDetalhes.java:

    35 – idRestaurante = getIntent().getStringExtra(ListaRestaurantes._ID);
    (._ID)

    71 – gerenciador.atualizar(idRestaurante,…
    (.atualizar)

    82 – Cursor c = gerenciador.obterPorId(idRestaurante);
    (.obterPorId)

    Fico grato se possível dar uma indicação para resolver esses problemas.
    Além disso, gostaria de modificar este código para criar a partir deste formulário um arquivo em xml, ou seja, exportar o arquivo para a memória local, se você puder me dar uma luz nisso também agradeço.

    Deste já, agradeço atenção.
    Uilque Neuton.

  2. Carlos Noster

    olá Rafael eu trabalhei em cima de um tutorial que mostrava como mostrar os bytes recebidos e enviados e então implementei para medir a velocidade de conexão da internet movel 2G/3G/4G para celulares a partir da versao 2.3 gingerbread.

    agora gostaria de mostrar estes valores obtidos com o aplicativo na barra de status quando inicializar o aplicativo.e quando fechar o aplicativo apagar da barra os mesmos. seriam o DownSpeed e o UPspeed.voce poderia me ajudar?

    obrigado.

Deixe uma resposta