首页 > 解决方案 > Android 通知通道设置 - 未列出应用程序提供的声音

问题描述

整天都在研究这个问题,找不到答案。

在 Android Oreo 之前,我们的应用程序将允许用户通过 webview(我们自己的 UI)通过 html 页面更改通知的音调。我们将显示来自 android 系统(铃声管理器)的铃声,并抓取应用程序原始文件夹中列出的任何内容。

在新的安卓奥利奥中,我们不能轻易改变通知铃声,我们必须使用频道。所以我只是将我们的 UI 更改为..

if(OS.version < Android Oreo) ---> 继续使用相同的 UI 并设置基调。

if(OS.version >= Android Oreo)---> 创建意图和startActivity结果 - intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");

我以为一切都很好,但意识到我最初在应用程序启动时设置的应用程序提供的声音不在声音列表中。因此,如果用户进入频道设置,并将声音从“应用程序提供的声音”更改为其他任何内容,则用户无法在不重新安装的情况下恢复“应用程序提供的声音”。

有一个默认通知声音选项,但是,它不是我们的默认声音。(也许这是android的默认通知声音......)默认通知声音应该是应用程序提供的声音。

我确实发现有一个文件夹可以放一些通知声音。 Android\media\com.google.android.talk\Notifications 它将显示在该声音列表中,但是,这可能不是所有手机上的相同位置,而且用户可能不知道哪个声音是实际的默认声音.

有任何想法吗?我是否需要传递一些额外的东西来使默认声音成为应用程序提供的声音?我需要在清单中添加一些东西吗?

标签: javaandroidaudioandroid-notifications

解决方案


终于解决了我自己的问题。我实施的修复是获取原始声音并将它们添加到铃声管理器。之后,当要更改频道声音时,它会预先填充到“应用程序提供的声音”中。

默认通知声音实际上是系统默认通知声音,这是您不想为任何人更改的东西。:)

以下 URL 帮助我找到了解决方案。

RingtoneManager 类型中的方法 setActualDefaultRingtoneUri(Context, int, Uri) 不适用于参数 OnItemClickListener

http://programondaspot.blogspot.com/2015/09/set-raw-resource-file-as-ringtone-in.html


推荐阅读