解决5.0以上通知栏图标变白

来源:互联网 发布:一机一码视频破解知乎 编辑:程序博客网 时间:2024/04/29 10:19


5.0以上(不包含5.0),系统默认通知栏图标为系统启动图标,会自动将通知栏的图标(有色区域)全部填充为白色,像一个白色格子,这是Google 为了实现材料设计规范,特意为之。为了去除白色图标,镂空背景即可:

系统启动图标ic_launcher.png


指定最顶层状态栏的小图标ic_notif.png,图片大小(60*60到80*80像素为佳)


这里贴出极光官方API的说明,但第一种方法好像并没什么用,第二种还需要服务端提供样式id(notificationID),当然服务器给出不同的ID就能得到相应的样式,在极光推送网页上也要填上相应的ID(范围1-1000),id为0时为系统默认。样式详细过程见: 用了极光推送的项目,可以配置自定义通知
http://docs.jpush.io/client/android_tutorials/#_11





客户端定义通知栏样式

自定义的通知栏样式,是在客户端进行的。请参考 通知栏样式定制API 来看所支持的功能。

自定义通知栏样式设计
  • 有个 PushNotificationBuilder 概念,开发者使用 setPushNotificationBuilder 方法为某种类型的 PushNotificationBuilder 指定编号。
  • setPushNotificationBuilder 可以在 JPushInterface.init() 之后任何地方调用,可以是开发者应用的逻辑来触发调用,或者初始化时调用。
  • 只需要设置一次,JPush SDK 会记住这个设置。在下次收到推送通知时,就根据通知里指定的编号来找到 PushNotificationBuilder 来展现、执行。
API - setDefaultPushNotificationBuilder 设置默认

此 API 改变默认的编号为 0 的通知栏样式。

API - setPushNotificationBuilder 指定编号

此 API 为开发者指定的编号,设置一个自定义的 PushNotificationBuilder(通知样式构建器)。

Example - 基础的 PushNotificationBuilder

定制声音、震动、闪灯等 Notification 样式。

BasicPushNotificationBuilder builder = new BasicPushNotificationBuilder(MainActivity.this);builder.statusBarDrawable = R.drawable.jpush_notification_icon;builder.notificationFlags = Notification.FLAG_AUTO_CANCEL;  //设置为自动消失builder.notificationDefaults = Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE | Notification.DEFAULT_LIGHTS;  // 设置为铃声与震动都要JPushInterface.setPushNotificationBuilder(1, builder);
Example - 高级自定义的 PushNotificationBuilder

基于基础的 PushNotificationBuilder,可进一步地定制 Notification 的 Layout。

这里作为 example 的 customer_notitfication_layout 在我们的 example 项目的 /res/layout/ 下可以找到。你完全可以用自己的 layout。


    CustomPushNotificationBuilder builder = new     CustomPushNotificationBuilder(MainActivity.this,                              R.layout.customer_notitfication_layout,                               R.id.icon,                               R.id.title,                               R.id.text);                              // 指定定制的 Notification Layout    builder.statusBarDrawable = R.drawable.your_notification_icon;          // 指定最顶层状态栏小图标    builder.layoutIconDrawable = R.drawable.your_2_notification_icon;       // 指定下拉状态栏时显示的通知图标    JPushInterface.setPushNotificationBuilder(2, builder);

如果只想在客户端设置,一直使用自己定义的样式,请看下面
代码示例:

/** * 当用户需要定制默认的通知栏样式时,则可调用此方法。 */private void setDefaultPushNotificationBuilder(Context context) {    CustomPushNotificationBuilder builder = new            CustomPushNotificationBuilder(context,            R.layout.customer_notitfication_layout,            R.id.notif_icon,            R.id.notif_title,            R.id.notif_text);    // 指定定制的 Notification Layout    builder.statusBarDrawable = R.drawable.ic_notif;    // 指定最顶层状态栏小图标    builder.layoutIconDrawable = R.drawable.ic_launcher;    // 指定下拉状态栏时显示的通知图标    JPushInterface.setDefaultPushNotificationBuilder(builder);}


在极光推送注册方法下的JpushInterface.init(),方法下调用自定义的样式即可(只需要调用一次)

private void registerPush() {    // JPush    JPushInterface.setDebugMode(true);    JPushInterface.init(this.getApplicationContext());    setDefaultPushNotificationBuilder(PushProcessService.this);
}

完成上面的步骤即可。




1 1