4

如果您想對狀態欄通知進行任何修改(包括輕微更改圖標),Urban Airship建議您使用CustomPushNotificationBuilder創建自定義通知。城市飛艇:默認狀態欄通知的自定義圖標

不幸的是,使用RemoteView的通知,附有許多不必要的影響與製造商的定製和/或特定平臺的外觀,including text colors和參考私人資源(例如@*android:drawable/notify_panel_notification_icon_bg_tile在蜂窩/ ICS)。

必須有一個簡單的方法來交換圖標,而不使用RemoteView。怎麼樣?

回答

9

我發現,通過重寫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); 
+0

嘿保羅,我對解決自定義圖標,並修改插件只顯示一個圖標,如果發生多個通知。你的代碼示例看起來是一個很好的開始,我想表示感謝你回答你自己的問題。我想知道您是否可以闡明您重寫此代碼的位置?我對Android開發很陌生,我的應用程序使用Phonegap。因此,我實際上甚至不知道這個代碼會在哪裏。任何幫助都會很棒。謝謝! –

+0

@RyanMartin無需爲修改原始庫而弄髒手。 您可以通過將上面的代碼放在應用程序的'onCreate()'中來覆蓋功能。您將需要定義自己的擴展'Application'的類,並使用''中的'android:name =「...」'屬性在清單中聲明它。要使所有通知顯示在單個圖標下,一個好的開始就是設置一個固定的通知ID。 如果您遇到任何困難,請查看您有多遠,並隨時鏈接到新問題。 –

+0

太好了,非常感謝信息,保羅。 –

1

我知道這是一個老問題,但UrbanAirship GET相當經常更新,所以我決定去幫助別人誰可能達到這一頁。從版本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(); 
} 

}

最後,則必須將此作爲UrbanAirship的新通知工廠在您的應用程序類或任何你初始化UA:

UAirship.shared().getPushManager().setNotificationFactory(new MyNotificationFactory(getApplicationContext())); 
1

我們在默認通知工廠中提供了很多功能,例如大樣式(收件箱,文本,圖片),棒棒糖功能(隱私,優先級)和交互式通知 鈕釦。如果你只是想設置圖標,也許是強調色,我提出以下建議:

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

的類全部文檔可以在這裏找到 - http://docs.urbanairship.com/reference/libraries/android/latest/reference/com/urbanairship/push/notifications/DefaultNotificationFactory.html

+0

完美答案。他們爲什麼不更新他們的文檔?與Urban Airship一起工作太糟糕了。可憐的文檔。 – Harpreet

+0

@Harpreet我們盡力保持我們的文檔更新。你能否提供更多關於什麼使我們的文檔很差的細節? http://docs.urbanairship.com/platform/android.html#customizing-push-notifications – ralepinski