将我的项目升级到 Android O 后
buildToolsVersion "26.0.1"
Android Studio中的Lint显示以下通知构建器方法的已弃用警告:
new NotificationCompat.Builder(context)
The problem is: Android开发者更新了描述 NotificationChannel 的文档以支持Android O中的通知,并为我们提供了一个代码段,但使用了相同的弃用警告:
Notification notification = new Notification.Builder(MainActivity.this)
.setContentTitle("New Message")
.setContentText("You've received new messages.")
.setSmallIcon(R.drawable.ic_notify_status)
.setChannelId(CHANNEL_ID)
.build();
My question: 是否还有其他建筑通知解决方案,仍然支持Android O?
我找到的解决方案是将通道ID作为Notification.Builder构造函数中的参数传递 . 但是这个解决方案并不完全可以重用 .
new Notification.Builder(MainActivity.this, "channel_id")
8 回答
文档中提到了不推荐使用构建器方法
NotificationCompat.Builder(Context context)
. 我们必须使用具有channelId
参数的构造函数:https://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html
https://developer.android.com/reference/android/app/Notification.Builder.html
如果要重用构建器设置器,可以使用channelId创建构建器,并将该构建器传递给辅助方法并在该方法中设置首选设置 .
这是所有Android版本的工作代码 API LEVEL 26+ 具有向后兼容性 .
Call the 2-arg constructor: 为了与Android O兼容,请致电support-v4
NotificationCompat.Builder(Context context, String channelId)
. 在Android N或更早版本上运行时,将忽略channelId
. 在Android O上运行时,还要使用相同的channelId
创建NotificationChannel
.Out of date sample code: 几个JavaDoc页面上的示例代码(如Notification.Builder,调用
new Notification.Builder(mContext)
)已过期 .Deprecated constructors:
Notification.Builder(Context context)
和 v4NotificationCompat.Builder(Context context)
已弃用,有利于Notification[Compat].Builder(Context context, String channelId)
. (见Notification.Builder(android.content.Context)和v4 NotificationCompat.Builder(Context context) . )Deprecated class: 不推荐使用整个类 v7
NotificationCompat.Builder
. (见v7 NotificationCompat.Builder . )以前,需要v7NotificationCompat.Builder
来支持NotificationCompat.MediaStyle
. 在Android O中,media-compat library的android.support.v4.media
包中有一个v4NotificationCompat.MediaStyle
. 如果您需要MediaStyle
,请使用那个 .API 14+: 在26.0.0及更高版本的Support Library中,support-v4和support-v7软件包都支持最低API级别14. v#名称是历史名称 .
见Recent Support Library Revisions .
而不是像许多答案那样检查
Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
,而是有一种稍微简单的方法 -将以下行添加到 AndroidManifest.xml 文件的
application
部分,如Set Up a Firebase Cloud Messaging Client App on Android doc中所述:然后在 values/strings.xml 文件中添加一个带有通道名称的行:
之后,您将能够使用带有2个参数的NotificationCompat.Builder构造函数的新版本(因为在Android Oreo中已弃用具有1个参数的旧构造函数):
以下是示例代码,它在Android Oreo中运行,而且比Oreo少 .
简单样本
正确的代码是:
具有依赖性26.0.1和新的更新依赖性,例如28.0.0 .
有些用户以下面的形式使用此代码:
因此逻辑是您将声明或启动哪个方法,然后右侧的相同方法将用于分配 . 如果在Leftside中=你将使用某种方法,那么同样的方法将在=右侧用于新的分配 .
试试这个代码......一定会有用
在API级别26.1.0中不推荐使用此构造函数 . 请改用NotificationCompat.Builder(Context,String) . 所有发布的通知都必须指定NotificationChannel ID .