Android 城市飞艇:默认状态栏通知的自定义图标
Urban Airship建议,如果要对状态栏通知进行任何修改,包括简单地更改图标,请使用Android 城市飞艇:默认状态栏通知的自定义图标,android,urbanairship.com,android-notifications,android-notification-bar,Android,Urbanairship.com,Android Notifications,Android Notification Bar,Urban Airship建议,如果要对状态栏通知进行任何修改,包括简单地更改图标,请使用CustomPushNotificationBuilder创建自定义通知 不幸的是,使用RemoteView进行通知会带来许多与定制制造商和/或特定于平台的皮肤相关的不必要的影响,以及对私有资源的引用(例如@*android:drawable/notify_panel_notification_图标_bg_tile) 必须有一种简单的方法来交换图标,而无需使用RemoteView。如何设置?我发现,通过覆盖
CustomPushNotificationBuilder
创建自定义通知
不幸的是,使用RemoteView
进行通知会带来许多与定制制造商和/或特定于平台的皮肤相关的不必要的影响,以及对私有资源的引用(例如@*android:drawable/notify_panel_notification_图标_bg_tile
)
必须有一种简单的方法来交换图标,而无需使用
RemoteView
。如何设置?我发现,通过覆盖BasicPushNotificationBuilder
,我可以非常轻松地设置图标:
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);
BasicPushNotificationBuilder nb=new BasicPushNotificationBuilder(){
@凌驾
公共通知buildNotification(字符串警报,
地图(附加){
通知通知=super.buildNotification(警报,
额外费用);
//状态栏中显示的图标
notification.icon=R.drawable.notification;
//通知内容中显示的图标
notification.contentView.setImageViewResource(
android.R.id.icon,R.drawable.notification);
退货通知;
}
};
//设置自定义通知生成器
PushManager.shared().setNotificationBuilder(nb);
我知道这是一个老问题,但城市航空经常更新,所以我决定帮助其他可能访问此页面的人。从6.0.1版开始,不再有BasicNotificationBuilder
。为了使用图标、颜色等定制通知,您需要扩展NotifcationFactory
类,并重写createNotification
方法
如下例所示:
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();
}
}
最后,您必须在应用程序类或初始化UA的任何位置将其设置为UrbanAirship的新通知工厂:
UAirship.shared().getPushManager().setNotificationFactory(new MyNotificationFactory(getApplicationContext()));
我们在默认的通知工厂中提供了很多功能,如大样式(收件箱、文本、图像)、棒棒糖功能(隐私、优先级)和交互式通知按钮。如果您只想设置图标,可能还想设置重点颜色,我建议您:
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);
}
});
这个类的完整文档可以在这里找到-嘿,Paul,我将处理自定义图标并修改插件,以便在出现多个通知时只显示一个图标。您的代码示例看起来是一个很好的起点,我想感谢您回答了自己的问题。我想知道你是否可以解释一下你在哪里重写了这段代码?我对Android开发相当陌生,我的应用程序正在使用Phonegap。因此,我甚至不知道这段代码会去哪里。任何帮助都会很好。谢谢@RyanMartin无需修改原始库而弄脏您的手。您可以通过将上述代码放在应用程序的
onCreate()
中来覆盖该功能。您需要定义自己扩展应用程序的类,并使用
中的android:name=“…”
属性在清单中声明它。要使所有通知都显示在一个图标下,一个好的开始是设置一个固定的通知ID。看看你能走多远,如果你有任何困难,可以随意放置一个新问题的链接。这可能为我节省了一个小时的猜测和检查时间。谢谢在应用程序生命周期中,您将其称为什么?完美答案。他们为什么不更新他们的文档。使用城市飞艇太难了。可怜的文档。@Harpreet我们试图更新文档。你能提供更多关于我们的文档质量差的细节吗?如何在城市飞艇通知图标点击上显示应用程序?