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 getActivitygetActivity(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