Dirigível Urbano:ícone personalizado para notificação padrão da barra de status
Pergunta
Urban Airship recomenda criar uma notificação personalizada com CustomPushNotificationBuilder
se você quiser fazer alguma modificação na notificação da barra de status, incluindo alterar trivialmente o ícone.
Infelizmente, usando um RemoteView
para notificações traz muitas implicações indesejadas relacionadas a fabricantes personalizados e/ou skins específicos da plataforma, incluindo cores de texto e referências a recursos privados (por exemplo @*android:drawable/notify_panel_notification_icon_bg_tile
no Honeycomb/ICS).
Deve haver uma maneira simples de trocar o ícone sem usar RemoteView
.Como?
Solução
Eu descobri que substituindo BasicPushNotificationBuilder
, posso definir o ícone de maneira bastante trivial:
BasicPushNotificationBuilder nb = new BasicPushNotificationBuilder() {
@Override
public Notification buildNotification(String alert,
Map<String, String> extras) {
Notification notification = super.buildNotification(alert,
extras);
// The icon displayed in the status bar
notification.icon = R.drawable.notification;
// The icon displayed within the notification content
notification.contentView.setImageViewResource(
android.R.id.icon, R.drawable.notification);
return notification;
}
};
// Set the custom notification builder
PushManager.shared().setNotificationBuilder(nb);
Outras dicas
Eu sei que esta é uma pergunta antiga, mas o UrbanAirship é atualizado com bastante frequência, então decidi ajudar outras pessoas que possam acessar esta página.A partir da versão 6.0.1 não há BasicNotificationBuilder
não mais.Para personalizar sua notificação com ícone, cor e outros enfeites, você precisa estender o NotifcationFactory
classe e substituir o createNotification
método.
Como mostrado no exemplo abaixo:
public class MyNotificationFactory extends NotificationFactory {
public MyNotificationFactory(Context context){
super(context);
}
@Override
public Notification createNotification(PushMessage pushMessage, int i) {
NotificationCompat.Builder builder = new NotificationCompat.Builder(getContext())
.setContentTitle(getContext().getResources().getString(R.string.app_name))
.setContentText(pushMessage.getAlert())
.setSmallIcon(R.drawable.your_icon_here)
.setColor(getContext().getResources().getColor(R.color.your_color_here))
.setAutoCancel(true);
return builder.build();
}
@Override
public int getNextId(PushMessage pushMessage) {
return NotificationIDGenerator.nextID();
}
}
Por fim, você deve definir isso como a nova fábrica de notificação do UrbanAirship em sua classe de aplicação ou onde quer que você tenha inicializado o UA:
UAirship.shared().getPushManager().setNotificationFactory(new MyNotificationFactory(getApplicationContext()));
Fornecemos muitas funcionalidades em nossa fábrica de notificação padrão, como grandes estilos (caixa de entrada, texto, imagem), recursos de pirulito (privacidade, prioridade) e botões de notificação interativos.Se você está apenas tentando definir o ícone e talvez a cor de destaque, recomendo o seguinte:
UAirship.takeOff(this, new UAirship.OnReadyCallback() {
@Override
public void onAirshipReady(UAirship airship) {
// Perform any airship configurations here
// Create a customized default notification factory
DefaultNotificationFactory defaultNotificationFactory = new DefaultNotificationFactory(getApplicationContext());
defaultNotificationFactory.setSmallIconId(R.drawable.ic_notification);
defaultNotificationFactory.setColor(NotificationCompat.COLOR_DEFAULT);
// Set it
airship.getPushManager().setNotificationFactory(defaultNotificationFactory);
}
});
A documentação completa da aula pode ser encontrada aqui - http://docs.urbanairship.com/reference/libraries/android/latest/reference/com/urbanairship/push/notifications/DefaultNotificationFactory.html