if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// Use methods introduced in API 11. (i.e. Notification.Builder)
} else {
// Use old methods to ensure backwards compatibility.
}
public static buildNotification(Context ctx) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// Create and return the Notification using Notification.Builder
} else {
// Create and return the Notification using pre-HoneyComb methods
}
}
2 回答
您必须自己考虑新方法,例如使用,
放置这些检查的好地方是实用程序类(即
CompatUtils.java
) . 因此,例如,您可以创建一个静态方法,该方法接受Context
参数并返回一个新的Notification
:然后只需在
Activity
中调用CompatUtils.buildNotification(this)
即可创建新的Notification
. 抽象出这些细节可以使您的内容简洁明了,如果您以后需要,可以轻松更改 .当然,最好只使用旧方法来创建
Notification
,因为无论如何都需要实现它们,而Notification.Builder
主要是为了方便起见 . 尽管如此,如果您以后遇到类似的问题,这绝对是您应该记住的事情!编辑:
Android支持包中也提供了
Notification.Builder
,因此您应该在这种情况下使用它...但是,对于兼容包中未提供的方法,您应该使用上述设计模式 .谷歌有自己的兼容性软件包(在支持库中),还有其他第三方解决方案(如actionBarSherlock),Lint工具可以告诉你何时尝试使用一个无法使用的新功能您设置的API范围 .
检查API的一种方法是使用android.os.Build.VERSION.SDK_INT . 另一种方式是使用反射,有时谷歌使用(但我不知道为什么) .
在任何情况下,谷歌建议在其视频中始终将targetSdk设置为最高的那个,以便改进输出APK的优化 .