カスタムNotificationのBackgroundカラーについて
上記のように、ICS端末で真っ白なNotificationが表示されてしまう場合があります。
この現象が発生する条件は、Notification登録時に以下の指定を行っている場合です。
- setContentでRemoteViewsをセット
- PackageのtargetSdkVersionが"9"未満の場合
現象発生の原因
Android-4.0.3_r1のframeworksのソースを見てましょう。
\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone
- PhoneStatusBar.java
private boolean inflateViews(NotificationData.Entry entry, ViewGroup parent) { StatusBarNotification sbn = entry.notification; RemoteViews remoteViews = sbn.notification.contentView; if (remoteViews == null) { return false; } : : : applyLegacyRowBackground(sbn, content); entry.row = row; entry.content = content; entry.expanded = expanded; entry.largeIcon = largeIcon; return true; } void applyLegacyRowBackground(StatusBarNotification sbn, View content) { if (sbn.notification.contentView.getLayoutId() != com.android.internal.R.layout.status_bar_latest_event_content) { int version = 0; try { ApplicationInfo info = mContext.getPackageManager().getApplicationInfo(sbn.pkg, 0); version = info.targetSdkVersion; } catch (NameNotFoundException ex) { Slog.e(TAG, "Failed looking up ApplicationInfo for " + sbn.pkg, ex); } if (version > 0 && version < Build.VERSION_CODES.GINGERBREAD) { content.setBackgroundResource(R.drawable.notification_row_legacy_bg); } else { content.setBackgroundResource(R.drawable.notification_row_bg); } } }
NotificationのBackgroundカラーをセットしている判定文をチェック!!
なんとBuild.VERSION_CODES.GINGERBREAD(APILevel9)以前と以降で値が異なるのです。
ということで、カスタムNotificationを使用しているFroyo向アプリを公開している方は要注意です。