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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top