安卓通知渠道设置 - 不列出应用提供的声音

4
整天都在研究这个问题,但仍然找不到答案。以前,在 Android Oreo 之前,我们的应用程序可以通过 WebView(我们自己的 UI)上的 HTML 页面允许用户更改通知铃声。我们会显示来自 Android 系统(铃声管理器)的音调,并获取位于应用程序 raw 文件夹中列出的任何内容。
在新的 Android Oreo 中,我们无法轻松更改通知的铃声,必须使用通道。因此,我简单地将我们的 UI 更改为:
如果 (OS.version < Android Oreo) ---> 继续使用相同的 UI 并设置提示音。
如果 (OS.version >= Android Oreo) ---> 创建 Intent 并 startActivityForResult - intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
我以为一切都好了,但是发现在启动应用程序时设置的提供的声音在声音列表中不存在。因此,如果用户转到通道设置并将声音从“提供的应用程序声音”更改为其他任何声音,则用户无法重新获得该“提供的应用程序声音”而不重新安装应用程序。
有一个默认通知声音选项,但这不是我们的默认声音。(也许这是Android的默认通知声音……)默认通知声音应该是提供的应用程序声音。
我确实发现了一个文件夹,可以放置一些通知声音。 Android\media\com.google.android.talk\Notifications,它会显示在那个声音列表中,但这可能不是所有手机上的相同位置,而且用户可能不知道哪个声音才是实际的默认声音。
有什么想法吗?我需要传递一些额外的信息,使默认声音成为提供的应用程序声音吗?我需要在清单中添加一些内容吗?
1个回答

2
最终解决了自己的问题。我实施的修复方法是将原始声音添加到铃声管理器中。之后,当更改频道声音时,它会预填充为“应用程序提供的声音”。
默认通知声音实际上是系统默认的通知声音,这是您不希望为任何人更改的东西。 :)
以下网址帮助我找到了解决方案。 在RingtoneManager类型中,方法setActualDefaultRingtoneUri(Context、int、Uri)对于参数OnItemClickListener不适用

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


3
你是否需要请求WRITE_SETTINGS权限来解决问题?如果不请求此权限,我无法解决这个问题。但是,仅为了设置铃声而请求此权限对我来说太冒险了。 - Franklin
1
你如何在 RingtoneManager 上设置属性? - IgorGanapolsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接