Páginas

quarta-feira, 31 de outubro de 2012

Notificações


Atualizando dados utilizando PendingIntent


No android existem basicamente dois tipos de notificações. Elas podem ser feitas utilizando um Toast ou a área de Notificação do sistema. Para utilizar a área de notificação é necessário recuperar uma instancia do gerenciador de notificações. Feito isso, basta enviar como parâmetros um inteiro para identificar a notificação a notificação em si.

notificationManager.notify(iD, notification);

Porém, existem duas maneiras de conseguir uma instância de um objeto Notification. A primeira, utilizada em versões anteriores do android, consistia dos seguintes passos.

Intent intent = new Intent(this, ReceiverActivity.class);
intent.putExtra("parcel", (Parcelable) message);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

Notification notification = new Notification(R.drawable.ic_launcher, ticker, System.currentTimeMillis());

notification.setLatestEventInfo(this, title, content, pendingIntent);



A segunda, mais atual - versão básica retirada do android developers - consiste em utilizar um Builder para conseguir a instância do objeto Notification.

Intent intent = new Intent(this, ReceiverActivity.class);
intent.putExtra("parcel", (Parcelable) message);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setSmallIcon(R.drawable.ic_action_search);
builder.setContentTitle(title);
builder.setContentIntent(pendingIntent);
builder.setContentText(ticker);
builder.addAction(R.drawable.ic_launcher, title, pendingIntent);
O grande detalhe das duas implementações está na chamada do método getActivity
getActivity(Context context, int requestCode, Intent intent, int flags)

Ele funciona de maneira semelheante ao método Context.startActivity(Intent), iniciando uma nova atividade. O detalhe crucial nesse caso é o inteiro flag. Como podemos notificar sucessivas vezes, teremos a mesma PendingIntent - partimos do mesmo contexto e iniciamos a mesma atividade. Assim, precisamos usar a flag FLAG_UPDATE_CURRENT para atualizar os dados que estão empacotados na nossa Intent.

O código do projeto está disponível aqui.

Nenhum comentário:

Postar um comentário