【问题标题】:NotificationChannel playing wrong sound in OreoNotificationChannel 在 Oreo 中播放错误的声音
【发布时间】:2018-02-14 07:41:35
【问题描述】:

我在运行 Android Oreo 的设备中遇到了 NotificationChannel 声音这个奇怪的问题。

假设我的项目原始目录中有两个声音文件:

a.mp3
c.mp3

然后在第一次安装应用程序时,我使用它们的 uri 将这些声音分配给不同的通知通道(例如):

android.resource://myapp/2131558403 (for sound a.mp3)
android.resource://myapp/2131558404 (for sound c.mp3)

此时一切都按预期工作。 当我开始添加新声音(在前面或中间)时出现问题:

a.mp3
B.mp3 <- new file
c.mp3

然后相应地更改文件的资源 ID:

android.resource://myapp/2131558403 (for sound a.mp3)
android.resource://myapp/2131558404 (for sound B.mp3)
android.resource://myapp/2131558405 (for sound c.mp3)

所以此时我的第二个通知通道开始播放 B.mp3 声音文件而不是 c.mp3,因为它是使用 android.resource://myapp/2131558404 uri 初始化的。

使用新声音文件编译应用后,c.mp3 的资源 id 发生了变化。

那么这个问题的解决方案是什么,因为我在创建通知通道后无法修改它。

最明显的解决方案是不要在旧文件中间添加新文件,但可能会被遗忘。

也许我可以删除旧频道并使用新 ID 重新添加?

或者有没有办法让原始文件具有恒定的资源 ID?

【问题讨论】:

  • 你解决了吗?我也有同样的问题
  • 并非如此。就目前而言,我不会删除未使用的音频文件,并通过分配如下名称来确保将新的音频文件添加到末尾:z001_some_file; z002_another_one;不是最好的解决方案,但因为我不改变声音,所以通常没什么大不了的。我无法删除未使用的文件,这很烦人。

标签: android android-8.0-oreo android-8.1-oreo


【解决方案1】:

NotificationChannels 是持久的。进行此类更改时,您需要为频道提供不同的 ID,以便获取更改。

【讨论】:

  • 我所做的唯一更改是将新的音频文件添加到项目中。所以你建议我每次在项目中添加或删除一些音频文件时删除旧的通知通道并使用不同的 ID 重新创建它们?
【解决方案2】:

资源 id 随机变化,但不能更改通知渠道。为了解决这个问题,您需要为通知通道提供一个符号 uri,指向不引用资源 ID 的文件。

也就是说,而不是引用R.raw.notification

val soundUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
                  context.applicationContext.packageName + "/" + R.raw.notification)

你应该这样引用它:

val soundUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" +
                    context.applicationContext.packageName + "/raw/notification")

更多详情请查看此答案:https://stackoverflow.com/a/54796493/5301868

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多