Android Kotlin环境下Service推送Notification无声音振动问题求解
问题原因及解决方案
- 通知通道配置变更不生效
安卓8.0(API 26)及以上系统的通知通道一旦首次创建成功,后续任何修改通道配置(声音、振动、重要性等)的操作都不会生效,系统会一直沿用首次创建时的配置。你现在每次发通知都会调用createNotificationChannel,这个操作除了第一次之外都是无效的,如果之前测试时你用同一个channelId创建过没有配置声音振动的通道,后续改了代码也不会生效。
解决方法:
- 测试时先卸载原有APP重装,让新的通道配置生效
- 正式版本如果要修改通知提示规则,换一个全新的
channelId创建新通道即可,不需要额外修改旧通道 - 不要每次发通知都调用创建通道的方法,只需要在APP启动时调用一次就足够了
- 安卓8.0以下版本缺少提示配置
安卓8.0以下不存在通知通道机制,你现在只给通道配置了声音和振动,没有给通知构造器单独加对应配置,所以低版本设备不会触发提示。
解决方法:在API<26的分支补充配置:
@Suppress("DEPRECATION") builder.setPriority(Notification.PRIORITY_HIGH) // 新增以下配置 builder.setSound(soundUri, AudioManager.STREAM_NOTIFICATION) builder.setVibrate(longArrayOf(500, 500, 500))
- 缺失安卓13及以上的通知权限
安卓13(API 33)要求动态申请POST_NOTIFICATIONS权限,你目前的权限配置里没有添加这个权限,即便通知能正常展示,也可能不会触发声音和振动。
解决方法:
- 在AndroidManifest.xml中新增权限声明:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
- 首次启动APP时动态申请该权限,用户同意后才能正常收到带提示的通知。
setOnlyAlertOnce配置影响
你当前给通知设置了setOnlyAlertOnce(true),如果同一个notificationID的通知之前已经发送过,后续更新同ID的通知时不会重复触发声音和振动,测试时可以换全新的notificationID验证。
内容的提问来源于stack exchange,提问作者robot_
相关产品推荐
相关产品推荐

