通知(android.app.Notification)是跟随各个版本变化比较大的一个机制。
从创建android.app.Notification实例,到通过android.app.Notification.Builder快速创建,再到V4android.support.v4.app.NotificationCompat.Builder创建。
使用通知 可以使用几种方式:
android.app.Notification
android.app.Notification.Builder
V4包
android.support.v4.app.NotificationCompat.Builder
通过该类的方法可以看到版本变化
static { if (Build.VERSION.SDK_INT >= 26) { IMPL = new NotificationCompatApi26Impl(); } else if (Build.VERSION.SDK_INT >= 24) { IMPL = new NotificationCompatApi24Impl(); } else if (Build.VERSION.SDK_INT >= 21) { IMPL = new NotificationCompatApi21Impl(); } else if (Build.VERSION.SDK_INT >= 20) { IMPL = new NotificationCompatApi20Impl(); } else if (Build.VERSION.SDK_INT >= 19) { IMPL = new NotificationCompatApi19Impl(); } else if (Build.VERSION.SDK_INT >= 16) { IMPL = new NotificationCompatApi16Impl(); } else { IMPL = new NotificationCompatBaseImpl(); } }
只能通过Builder创建,返回android.app.Notification,
public Notification build() { return IMPL.build(this, getExtender()); }
V7已废弃
package android.support.v7.app; ....... @Deprecated public class NotificationCompat extends android.support.v4.app.NotificationCompat {
--------------------------------------
设置小图标,通知栏小图标显示或者通知栏下拉状态下右下角显示的图标,根据各家Rom不同显示方式不固定。
当系统版本小于23,使用V4包(V7未探索)只能使用apk自带的资源的id设置改图标,
public Builder setSmallIcon(@DrawableRes int icon) {
只有系统版本23及以上才能通过一个Icon实例指定一个小图标。
setSmallIcon(Icon icon);
Icon 可以指定一个资源,来自Uri,BitMap,resId等
createFromStream,createWithResource,createWithBitmap,createWithData,createWithContentUri
package android.graphics.drawable; ...... public final class Icon implements Parcelable { /** @hide */ public static final int TYPE_BITMAP = 1; /** @hide */ public static final int TYPE_RESOURCE = 2; /** @hide */ public static final int TYPE_DATA = 3; /** @hide */ public static final int TYPE_URI = 4; /** @hide */ public static final int TYPE_ADAPTIVE_BITMAP = 5; .... }
该类存在于Build.VERSION.SDK_INT >=23的版本下,也就是Build.VERSION.SDK_INT >=23时才可使用该方式设置SmallIcon,v4包没有相关实现,所以无法通过v4使低版本系统兼容该特性。