Android 11 的某些三星设备无法播放铃声

Ringtone not playing on certain Samsung devices with Android 11

我正在开发 VoIP 应用程序,当有来电时,至少在三星 A20e 和三星 A71 设备 运行 Android 上听不到铃声 11。不幸的是,此信息来自一些用户,他们说他们遇到了这个问题,但我可以访问的所有手机上都没有出现这个问题,所以我自己无法查看日志。

获取铃声URI,使用以下代码:

val uri = RingtoneManager.getActualDefaultRingtoneUri(context, RingtoneManager.TYPE_RINGTONE)

然后在通知通道上使用该 URI:

val attributes = AudioAttributes.Builder()
   .setUsage(AudioAttributes.USAGE_NOTIFICATION)
   .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
   .build()
notificationChannel.setSound(uri, attributes)

并且在 NotificationCompat.Builder 的方法 setSound 中再次使用 URI 来生成实际的通知。

我试图在模拟器上重现该问题并多次更改 setUsagesetContentType 中的值,但似乎没有任何影响。我还在每次更改时重新安装了该应用程序,以确保创建一个新的通知渠道。

然后我在互联网上的某个地方读到,铃声在模拟器上无法运行。但是,我确实有一个模拟器,在该模拟器上实际上可以听到铃声,所以我不太确定这是真的,至少不是对所有配置都是如此。

最后我要补充一点,当我添加以下行时,铃声在我原来的模拟器上也不是静音的:

RingtoneManager.getRingtone(context, uri).play()

但是,我实际上无法使用那段代码,因为我需要将铃声附加到通知(频道)。

有没有人遇到过同类问题?是不是我的通知设置或通知渠道有问题?这只是三星的问题吗?我希望有人能帮助我。

我会回答我自己的问题。原来客户没有把问题描述得足够透彻,当他向我们提供了更多信息时,结果证明这是一个很容易解决的问题。当 phone 的通知音量打开并且 phone 的铃声音量关闭时,可以听到铃声。但是,当通知音量关闭而铃声音量打开时,铃声将听不到。所以这两个被调换了,通过用 AudioAttributes.USAGE_NOTIFICATION_RINGTONE.

替换 AudioAttributes.USAGE_NOTIFICATION 来解决