Notification.Builder(context)最近已被弃用,其中包含Android O中的通知频道。
问题:
使用Notification.Builder(context, StringID)
代替Notification.Builder(context)
后,我确实收到了通知我的Android O设备的通知
但是,在Android 23(M)上尝试后,我没有收到通知。我调试了我的代码,一旦调试器在Android 23(M)上点击Notification.Builder(context,StringID)后面的行就停止执行。
FIX:
要解决此问题,我使用if / else条件在Android O设备和其他其他设备之间进行隔离。
我有以下代码段:
Notification.Builder notificationBuilder;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
notificationBuilder = new Notification.Builder(mContext,
mContext.getResources().getString(R.string.notification_id_channel));
} else {
notificationBuilder = new Notification.Builder(mContext);
}
Android Studio中的Lint显示以下弃用行:
问题:
有没有办法摆脱弃用警告线?
答案 0 :(得分:38)
您的解决方案是使用NotificationCompat.Builder(Context context, String channelId)
。如果您使用此功能,则无需检查API级别,Builder会忽略pre-Oreo设备上的频道ID。
我已经在API 15,22,23和26上进行了测试,它运行良好。
答案 1 :(得分:2)
您必须定义一个唯一的channelId(例如" MyChannelId_01")并调用NotificationCompat.Builder(ctx," MyChannelId_01")。构建的通知将发布在此NotificationChannel" MyChannelId_01"。
这使您可以定义通知的重要性(这可以控制发布到此通道的中断通知的方式。值为IMPORTANCE_UNSPECIFIED,IMPORTANCE_NONE,IMPORTANCE_MIN,IMPORTANCE_LOW,IMPORTANCE_DEFAULT或IMPORTANCE_HIGH)。
您可以在此处找到示例:Creating a notification channel
答案 2 :(得分:1)
我遇到了同样的问题,因为我的目标是Android 22和24,我只是这样做了: NotificationCompat.Builder notification = new NotificationCompat.Builder(MainActivity.this,"")
我相信有人会说这是一个黑客攻击,但它已经摆脱了警告,我没有任何问题。
似乎传递一个空字符串适用于< android 26。
如果这会导致26的问题,也许其他人可以说明。
由于