Android

3 fev, 2014

Múltiplas notificações push na barra de status do Android com o Phonegap

Publicidade

Ano passado, trabalhei em um projeto Android utilizando Phonegap, Jquery Mobile e Notificações Push. Eu também escrevi um artigo explicando como utilizar o PHP para enviar a parte que roda no lado do servidor das notificações push. Hoje, quero mostrar um pequeno hack que fiz para alterar o comportamento padrão das notificações push. Vou explicar um pouco.

Quando você utiliza o plugin Push de maneira inovadora, “fora da caixa”, você verá uma mensagem na barra de status do Android toda vez que enviar uma notificação push (e o seu aplicativo não está sendo executado nesse momento). Se clicar na notificação, seu aplicativo irá iniciar e você pode manipular a notificação. Mas se enviar mais de uma notificação para o dispositivo, apenas a última será exibida na barra de status. Esse comportamento pode servir para a maior parte das situações, mas, para o meu aplicativo, eu queria ver todas as notificações na barra de status até que eu clicasse em uma (então todas precisavam sumir). Se quisermos fazer isso, precisamos modificar um pouco nosso aplicativo Phonegap. Permita-me mostrar o que eu fiz.

Basicamente, precisamos mudar o arquivo com.plugin.gcm.GCMIntentService. Se abrirmos esse arquivo Java, poderemos ver que há uma constante chamada NOTIFICATION_ID e uma função pública chamada createNotification com algo parecido com isto:

public static final int NOTIFICATION_ID = 237;
...

public void createNotification(Context context, Bundle extras)
{
    ...
    mNotificationManager.notify((String) appName, NOTIFICATION_ID, mBuilder.build());

}

Não sou um expert em Java, mas percebi que se mudasse essa função para:

public static final int NOTIFICATION_ID = 237;
public static int MY_NOTIFICATION_ID = 237;
...

public void createNotification(Context context, Bundle extras)
{
    ...
    MY_NOTIFICATION_ID++;
    mNotificationManager.notify((String) appName, MY_NOTIFICATION_ID, mBuilder.build());

}

Agora meu dispositivo Android exibirá múltiplas notificações, exatamente como eu precisava.

Se precisarmos manipular de forma apropriada a maneira como nossas notificações são canceladas, também podemos modificar a função pública cancelNotification.

public static void cancelNotification(Context context)
{
    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    //mNotificationManager.cancel((String)getAppName(context), MY_NOTIFICATION_ID);
    mNotificationManager.cancelAll();
    MY_NOTIFICATION_ID = NOTIFICATION_ID;
}

E isso é tudo. Múltiplas notificações conforme precisamos.

***

Artigo traduzido pela Redação iMasters, com autorização do autor. Publicado originalmente em http://gonzalo123.com/2013/09/30/multiple-phonegap-push-notifications-in-the-androids-status-bar/