AudioManager.setStreamMute在android 5 Lollipop中无效

时间:2015-02-05 02:32:08

标签: android android-5.0-lollipop android-audiomanager

我正在开发一个垃圾邮件过滤应用程序,而我正试图让Ringer为传入(垃圾邮件)呼叫静音。问题不在于AudioManager.setStreamMute,也没有AudioManager.setRingerMode在Lollipop中工作。这是我的代码片段:

public class CallReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
    String stateStr = intent.getExtras().getString(TelephonyManager.EXTRA_STATE);

    if (stateStr.equals(TelephonyManager.EXTRA_STATE_IDLE)) {

      AudioManager audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
      audioManager.setStreamMute(AudioManager.STREAM_RING, false);
      Log.i(TAG, "unmute");

    } else if (stateStr.equals(TelephonyManager.EXTRA_STATE_RINGING)) {

      AudioManager audioManager = (AudioManager)context.getSystemService(Context.AUDIO_SERVICE);
      audioManager.setStreamMute(AudioManager.STREAM_RING, true);
      Log.i(TAG, "mute");

    }
  }

当有来电时,静音部分总是被执行但有时会成功,有时无法使铃声静音。我找不到任何规则。并且audioManager.setRingerMode(AudioManager.RINGER_MODE_SILENT)也不起作用。在仿真器上进行测试时,这似乎工作正常。 5,所以我猜它有点与Lollipop有关,没有静音模式,但有中断过滤。商业垃圾邮件过滤器正在维持良好状态,所以有人可以告诉我如何用Lollipop静音来电吗?

1 个答案:

答案 0 :(得分:1)

我在Android 5中遇到了同样的问题。带有false to unmute值的AudioManager.setStreamMute永远不会正常工作。

我尝试了AudioManager.setStreamSolo,它对我有用。

//to mute ringtone
Global.app().getAudioManager().setStreamSolo(AudioManager.STREAM_MUSIC, true);

//unmute ringtone
Global.app().getAudioManager().setStreamSolo(AudioManager.STREAM_MUSIC, false);

除了你想要播放的所有其他视频流外,它会静音。在可能的情况下,我需要播放自己的音频而不是铃声。

但如果你需要绝对的沉默,你可以尝试播放沉默的音频来破解。