Android heads-up/横幅通知在Nexus S(API 29)设备无法生效问题
横幅通知不生效解决方案(适配Android 10/API 29)
核心问题排查点
- 通知渠道配置错误:API 26及以上系统的通知优先级由渠道配置决定,你代码只传了
CHANNEL_ID,但未提前创建高优先级的通知渠道,单个通知设置的PRIORITY_HIGH不会生效 - 重复调用
setDefaults导致配置被覆盖:代码中连续两次调用setDefaults,第二次设置的DEFAULT_SOUND会覆盖第一次的DEFAULT_ALL,导致默认振动、提示灯配置丢失 - 缺少悬浮通知权限:Android 10及以上原生系统,高优先级通知要弹出横幅,需要应用开启「悬浮通知」权限(部分定制ROM叫「横幅通知」/「悬浮窗显示通知」权限)
修正后实现步骤
1. 提前创建高优先级通知渠道
要在发送通知前调用,推荐放在Application的onCreate方法中执行:
// 仅API 26及以上需要创建渠道 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { CharSequence channelName = "高优先级通知渠道"; String channelDesc = "用于展示横幅通知"; // 重点:渠道重要性设置为IMPORTANCE_HIGH,才会触发横幅弹出 int importance = NotificationManager.IMPORTANCE_HIGH; NotificationChannel channel = new NotificationChannel(CHANNEL_ID, channelName, importance); channel.setDescription(channelDesc); // 开启渠道的声音、振动、提示灯 channel.enableLights(true); channel.setLightColor(Color.RED); channel.enableVibration(true); channel.setVibrationPattern(new long[]{1000, 1000, 1000}); NotificationManager notificationManager = getSystemService(NotificationManager.class); notificationManager.createNotificationChannel(channel); }
2. 修正通知构造代码
删除重复的setDefaults调用,调整配置:
Context applicationContext = getApplicationContext(); NotificationCompat.Builder builder = new NotificationCompat.Builder(applicationContext, CHANNEL_ID) .setDefaults(NotificationCompat.DEFAULT_ALL) // 保留这一行即可,包含声音、振动、系统提示音 .setSmallIcon(R.drawable.ic_account_circle) .setContentTitle(notificationTitle) .setContentText(notificationTextBody) .setPriority(NotificationCompat.PRIORITY_HIGH) // 兼容API 25及以下版本 .setLights(Color.RED, 3000, 3000) // 可选:设置点击跳转PendingIntent,避免通知点击无响应 .setContentIntent(pendingIntent); NotificationManagerCompat notificationManager = NotificationManagerCompat.from(applicationContext); int notificationId = new Random().nextInt(); notificationManager.notify(notificationId, builder.build());
3. 检查应用通知权限
前往系统设置→应用→找到你的应用→通知→找到你创建的对应渠道,确认:
- 通知总开关已开启
- 「悬浮通知」/「横幅通知」开关已开启
- 声音、振动开关均按需求开启
补充说明
如果按照上述步骤配置后仍不生效,可卸载应用重装触发渠道重置(通知渠道创建后无法通过代码修改优先级,卸载重装才能更新已创建的渠道配置)。
内容的提问来源于stack exchange,提问作者Theodor Samson
相关产品推荐
相关产品推荐

