最近在适配android O,遇到个问题,应用中原本有设置界面通过RingtonePreference 选择铃声,set到notification中,弹出通知的时候notification播放该铃声,由于需要较明显的提醒用户,所以使用的是alarm类型的铃声(铃声时间长)。
然而到了O上,所有notification必须强制使用notification channel, 一旦使用了这个,notification的铃声就由系统设置同一管理了,而且供选择的铃声范围限制在了预置的notification类型铃声(短促)和用户自己的音乐等,原本想使用alarm类型的铃声这些没法选了。
于是稍微研究了一下这个notification channel,发现应用在创建的时候可以通过setSound() 方法来预置一个铃声,于是赶紧把期望的alarm铃声传进去。发现notification弹出时确实是播放的预期的铃声,可是到了notification channel 的设置界面一看,由于传入的铃声不在它选择铃声的范围内,所以界面上会显示勾选的是它的默认通知铃声,这是一个bug,还有,一旦你在这个设置里修改了铃声,你再也没法用回之前期望的alarm铃声了,无论是在代码里update channel 也好,删除channel再重新创建也好,都没法修改铃声了(参考官方文档,居然就是这么设计的!),除非应用卸载重装或者清除数据,真是坑爹!
所以凡是使用notification并且有自定义notification铃声的应用,到了android O上都会有这样的问题。
Google的本意其实挺好,应用自己不需要在维护通知铃声相关的设置,统一放在系统设置由用户去选,而且既然是notification,就应该用notification类型的铃声,原本就是android的设计规范。就是苦了国内无数自定义铃声的app了。
目前看来解决办法只有 1.改需求 2.应用自己用mediaplayer播放铃声,然而这又是一个巨深的坑,铃声得跟着notification的生命周期走,还有无数特殊情况需要考虑(来电,静音,录音中等等等等,曾经趟过,惨不忍睹)
作者:苍风忍
链接:https://www.jianshu.com/p/26ca4cc16fd8
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
分享到:
相关推荐
四、注意事项 1. **常驻通知的权限**:从Android 8.0开始,即使通知的优先级较低,也需要用户授权才能在后台显示。 2. **避免滥用常驻通知**:常驻通知应该只用于关键信息,过度使用可能引发用户反感。 3. **用户...
本文将深入探讨`NotificationTest`项目中涉及的Android通知机制,包括基本概念、创建过程、设置选项以及注意事项。 一、通知系统概述 Android的通知系统允许应用程序在状态栏上显示图标和简短信息,当用户点击通知...
六、注意事项 1. 为了兼容不同版本的Android,建议使用`NotificationCompat.Builder`。 2. 不同的通知优先级会影响其在通知中心的显示位置,`PRIORITY_DEFAULT`是常规优先级。 3. 通知的ID(如1)应保持唯一,以便...
7. **注意事项** - 不推荐随意去除通知,因为这可能引发用户体验问题,甚至违反Google Play政策。 - 如果服务在无通知的情况下被运行,系统可能会将其视为后台服务并回收。 总之,`startForeground`和`...
这个Demo项目为开发者提供了一个实践消息推送功能的平台,通过研究源码,可以深入了解Android消息推送的实现机制和注意事项。同时,结合服务器端代码的学习,可以更好地理解整个推送流程,提升自己的开发能力。
七、注意事项 1. 为了保证兼容性,建议使用`NotificationCompat.Builder`而不是`Notification.Builder`。 2. 避免滥用常驻通知,以免干扰用户。 3. 对于重要的、需要用户立即关注的通知,可以设置更高的优先级。 4. ...
四、实验注意事项 1. 注释:为了提高代码的可读性,应为每个类、方法和重要代码块添加清晰的注释。 2. 格式:遵循良好的编码风格,保持代码整洁,使用适当的缩进和空格。 3. 实验报告:详尽记录实验过程,附上运行...
使用Service的注意事项 - **内存管理**:`Service`运行在主线程中,避免在`Service`中进行耗时操作,否则可能导致ANR(Application Not Responding)错误。若需执行耗时任务,建议使用工作线程或者IntentService。...
在Android系统中,Notification是应用与用户交互的重要方式之一,特别是在后台...以上就是实现Android通知栏常驻的基本步骤和注意事项,通过这些方法,你可以创建一个持久且用户友好的通知,为用户提供方便的信息提示。
使用`NotificationChannel`(Android O及以上版本)和`NotificationCompat.Builder`(兼容更低版本)来创建通知。 3. **启动服务**:在`startForeground()`方法中,使用之前创建的通知对象和一个唯一的ID来启动服务...
6. **注意事项**: - 在Android 8.0及以上版本,为了提供更好的用户体验,需要创建NotificationChannel,否则通知可能无法正常显示。 - 考虑到不同设备的兼容性,某些视觉效果(如LED灯光)可能在某些设备上不可用...
- 创建一个NotificationChannel(针对Android O及以上版本)以确保通知的正常显示。 - 使用`NotificationCompat.Builder`构建Notification对象,设置标题、内容、图标等信息。 - 调用`NotificationManager.notify...
三、注意事项 1. 服务的生命周期管理:理解`onCreate()`、`onStartCommand()`、`onDestroy()`等方法的执行时机,确保正确释放资源。 2. 性能优化:避免在服务中执行耗时操作,如大量计算或网络请求,这些应该通过...