【问题标题】:In Android M, changing the ringer mode while the incoming call is ringing doesn't have any effect在 Android M 中,来电响铃时更改铃声模式没有任何效果
【发布时间】:2015-12-04 16:51:25
【问题描述】:

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

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

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

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

对于导致此问题的 Marshmallow 中的哪些变化以及是否有解决方法,是否有人提出建议?

【问题讨论】:

    标签: android android-6.0-marshmallow ring incoming-call


    【解决方案1】:

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

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

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

    【讨论】:

    • 您应该向 Google 提交错误报告
    • 除了上述解决方法之外,您有没有找到任何解决方案?
    • 如果您找到任何解决方案,它会有所帮助
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多