所以这或多或少是我最后一个问题的延续Link to last post
我一直在编写代码,我的一个朋友建议我使用 Notifiction.Builder,所以我已经弄清楚了。我想知道我或其他人将如何进行状态通知“跨 API” 我的意思是 Builder 在 API 11+ 上工作,但下面的任何内容都是不行的。是否有任何已知的解决方法/修复此问题,或者我需要编写两个不同版本的代码吗?
所以这或多或少是我最后一个问题的延续Link to last post
我一直在编写代码,我的一个朋友建议我使用 Notifiction.Builder,所以我已经弄清楚了。我想知道我或其他人将如何进行状态通知“跨 API” 我的意思是 Builder 在 API 11+ 上工作,但下面的任何内容都是不行的。是否有任何已知的解决方法/修复此问题,或者我需要编写两个不同版本的代码吗?
有许多不同的方法可以使用已弃用的方法来实现多个 api 支持,其中最常提到的是反射。就个人而言,我利用类加载器来解决通知问题。我创建了一个带有基本包装方法的基本抽象类,用于处理创建通知所需的不同数据,如下所示:
public abstract class NotificationWrapper {
public NotificationWrapper(Context context) {
}
public abstract void createNotification(int resid, CharSequence ticker);
public abstract void setTitle(CharSequence title);
public abstract void setText(CharSequence text);
public abstract void setIntent(PendingIntent intent);
public abstract void setFlags(int... flags);
public abstract void setDefaults(int defaults);
public abstract Notification getNotification();
}
您当然可以添加和删除方法,具体取决于您自定义通知的程度。然后您可以将其扩展到三个单独的类:一个用于 API <11,一个用于 API >=11,一个用于 Jelly Bean 及以上。在每个类中,您只需将这些方法调用中继到当前 API 版本的适当可用方法(即 pre-11 中继到 Notification 方法,post-11 中继到 Notification.Builder 方法,Jelly Bean 与 post-11 相同,除了它使用 build() 而不是 getNotification())。然后,当需要创建通知时,您可以使用 SDK 版本的条件和多态性的优点来加载正确的子类并使用其包装器方法构建通知:
NotificationWrapper wrapper = null;
int ver = VERSION.SDK_INT;
if (ver >= 16) {
wrapper = new NotificationWrapJB(context);
} else if (ver >= 11) {
wrapper = new NotificationWrapHC(context);
} else {
wrapper = new NotificationWrapPreHC(context);
}
wrapper.createNotification(resId, tickerText);
//etc....
同样,这只是处理这个问题的众多方法之一,但我喜欢它,因为它感觉更有条理。
如果您不熟悉用于不同 SDK 版本的方法,请阅读 Android 文档Notification和Notification.Builder。
我认为您正在寻找Support Library中的NotificationCompat。如果您正在寻找 Jelly Bean 附带的全新通知,您可以使用Jake Wharton 的NotificationCompat2(制作 ActionBarSherlock 的那个)。