解決5.0以上通知欄圖標變白



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);
}

完成上面的步驟即可。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章