You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android通知无声音和振动故障排查,附Notification配置代码

Android通知无提示音和振动的常见原因及解决方案

最核心诱因(90%以上的该问题都是这个原因)

从Android 8.0(API等级26)开始,通知的声音、振动、提示策略等属性完全绑定通知渠道(NotificationChannel),你代码中NotificationCompat.Builder里调用的setSound()、setVibrate()仅对Android 7.1及以下系统生效,Android 8.0及以上系统会直接忽略这两个配置,必须在创建通知渠道时就配置好对应的声音和振动规则。
而且通知渠道一旦被系统注册后,后续修改代码里的属性也不会生效,需要卸载App重装、或者修改渠道ID重新创建新渠道才能更新配置。

其他可能原因

  • 未申请必要权限:振动功能需要在AndroidManifest.xml中声明振动权限 <uses-permission android:name="android.permission.VIBRATE" />;Android 13(API等级33)及以上系统需要动态申请POST_NOTIFICATIONS权限,未获得授权的情况下通知不会弹出,自然也不会触发声音和振动。
  • 系统设置限制:手机处于静音、勿扰模式,或者系统设置中关闭了当前App的通知权限、对应通知渠道的声音/振动开关,即使代码配置正确也不会生效。
  • 音频资源无效:代码中设置的alarmSound对应的URI不存在、或者App没有访问该音频资源的权限,会导致提示音加载失败。
  • 通知优先级过低:通知渠道优先级设置为低等级(低于IMPORTANCE_DEFAULT),或者Builder中设置的priority过低,系统只会将通知折叠进通知栏,不会弹出提示也不会触发声音振动。

修复代码示例

第一步:先创建通知渠道(仅需在应用首次启动时调用一次即可)

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    // 配置渠道属性
    CharSequence name = "消息通知渠道";
    String description = "用于接收消息推送";
    int importance = NotificationManager.IMPORTANCE_HIGH; // 高优先级,会弹出横幅+触发声音振动
    NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
    channel.setDescription(description);
    // 渠道里配置声音和振动
    channel.setSound(alarmSound, Notification.AUDIO_ATTRIBUTES_DEFAULT);
    channel.enableVibration(true);
    channel.setVibrationPattern(new long[] { 1000, 1000, 1000, 1000, 1000 });
    // 注册渠道到系统
    NotificationManager notificationManager = getSystemService(NotificationManager.class);
    notificationManager.createNotificationChannel(channel);
}

第二步:通知Builder的配置可保留低版本兼容代码

你原有Builder代码不需要修改,保留setSound和setVibrate用于兼容Android 7.1及以下系统即可。

内容的提问来源于stack exchange,提问作者Blas Piris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 16:15:03