我们已经为在Oreo及更高版本上运行的设备创建了通知通道,这些通道使用位于/res/raw
文件夹中的自定义通知声音。最近,当用户升级我们的应用程序时,通知声音刚刚停止工作,并且通知仅使设备振动。
我们已确认卸载/重新安装或清除应用程序数据可以解决此问题。但是,为了使通知声音再次适用于所有人,而无需重新安装,我们实际上需要删除并重新创建这些频道。
我们创建通知通道如下:
fun initNotificationChannel(channel: PSSNotificationChannel) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val id = channel.id
val name = context.getString(channel.nameResId)
val importance = channel.importance
val channel = NotificationChannel(id, name, importance)
...
// Default sound
val soundUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
context.applicationContext.packageName + "/" + R.raw.notification)
val audioAttributes = AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_NOTIFICATION)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build()
channel.setSound(soundUri, audioAttributes)
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager?
notificationManager?.createNotificationChannel(channel)
}
}
我已验证该文件仍存在于/res/raw
中。似乎导致提交的提交只是到/res
文件夹中的一些添加/修改的文件。
答案 0 :(得分:0)
似乎此问题将soundUri
设置如下:
val soundUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
context.applicationContext.packageName + "/" + R.raw.notification)
看起来R.raw.notification
的值从2131689979
(声音起作用的版本)更改为2131755515
(声音不起作用的版本)。而且,由于您无法使用通知频道更改通知声音,因此几乎可以肯定,该频道正在尝试使用旧的资源ID(soundUri
)来解析android.resource://our.package.name/2131689979
。
我认为更好的方法是按名称直接引用文件,如下所示:
val soundUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
context.applicationContext.packageName + "/raw/notification")
我还注意到,Facebook Messenger和Slack之类的应用程序使用公共Notifications文件夹,它们可能只是在其中复制文件并引用该确切路径。这似乎还允许用户重新选择应用程序提供的声音,因为它在文件系统中可见。