2

前段时间我做了一个应用程序,它可以在某些人来电时更改铃声模式。因此,当其中一个人打电话时,它会更改响铃模式以使通话以最大音量响铃。我用

setRingerMode(AudioManager.RINGER_MODE_NORMAL)
am.setStreamVolume(AudioManager.STREAM_RING, am.getStreamMaxVolume(AudioManager.STREAM_RING), 0);

该应用程序还将中断过滤器更改为 INTERRUPTION_FILTER_ALL,但为了使事情更容易,我们假设未启用“请勿打扰”。因此,例如,如果手机设置为振动,当有匹配的联系人来电时,它会打开振铃器,并将音量设置为最大。

在我拿到带有棉花糖(Nexus 6P)的手机之前,一切都很好。现在,如果有来电,我的应用程序会像往常一样更改响铃模式和音量,但来电不会受到影响。即使铃声设置已更改,它的行为仍然相同。我可以验证我的应用程序是否正在进行更改 - 通话结束后,铃声音量设置完全符合它们应有的状态。如果另一个电话打进来,那个电话会正常响铃。似乎响铃模式更改并未应用于已经在进行中的来电。

有没有人对导致这种情况的 Marshmallow 的变化有什么建议,以及是否有解决方法?

4

2 回答 2

2

所以,我找到了解决这个问题的方法。我仍然不知道如何修复这个错误(或者为什么它首先存在),但我的解决方法效果很好。除了告诉操作系统更改铃声模式外,我还手动检索默认铃声,并在来电时在应用程序中播放:

Uri alertUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), alertUri);
if(r != null && !r.isPlaying()){
    r.play();
}

然后,当来电停止响铃时,我手动停止Ringtone

于 2015-12-11T10:31:19.650 回答
0

我在 Marshmallow 上遇到了同样的问题,我找到了 Xposed Framework 的解决方案。这个模块解决了这个问题: http ://repo.xposed.info/module/com.gzplanet.xposed.ringerandnotificationvolumeunlink

于 2016-07-15T19:35:01.237 回答