如何使用setAudioAttributes播放闹铃音量的铃声?

8

所以我正在努力理解音频属性。目前为止,我了解到以下内容:

// alarm.getSound() will return a proper URI to pick a ringtone
Ringtone tone = RingtoneManager.getRingtone(this, alarm.getSound());
if (Build.VERSION.SDK_INT >= 21) {
    AudioAttributes aa = new AudioAttributes.Builder()
        .setFlags(AudioAttributes.USAGE_ALARM | AudioAttributes.CONTENT_TYPE_SONIFICATION)
        .build();
    tone.setAudioAttributes(aa);
} else {
    tone.setStreamType(RingtoneManager.TYPE_ALARM);
}
tone.play();

本页讨论了音频属性及其“兼容性映射”。如果我之前使用了setStreamType(TYPE_ALARM)(就像上面一样),那么它将设置CONTENT_TYPE_SONIFICATIONUSAGE_ALARM标志。我想避免使用setStreamType,所以我在想,如果我手动设置这些标志(如上所示),那么当铃声响起时,它会使用闹钟音量。然而,似乎并不是这样工作的。

以上代码仍然使用我的Nexus 6的媒体音量而不是闹钟音量进行铃声响起。我使用的是构建MRA68N的6.0系统。我应该怎么做才能使用闹钟音量?


由于两个答案都没有明确说明这些参数是标志,因此它们被忽略了。它将始终通过默认流以全音量播放。但在适当的 setter 中设置它们可以解决这个问题。 - Abandoned Cart
这个答案可能会对在这里寻找帮助的人有所帮助:https://dev59.com/hqzka4cB1Zd3GeqP4zNP#53390067 - Andy Weinstein
2个回答

10

在 Moto G Android 6.0 上测试通过。

       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            AudioAttributes aa = new AudioAttributes.Builder()
                    .setUsage(AudioAttributes.USAGE_ALARM)
                    .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                    .build();
            ringtone.setAudioAttributes(aa);
        } else {
            ringtone.setStreamType(AudioManager.STREAM_ALARM);
        }

2
这里的回答有所帮助,但对我没有起作用。我开了一个问题链接来解决它。
以下是我的可行解决方案。
mediaPlayerScan = new MediaPlayer();
try {
  mediaPlayerScan.setDataSource(getContext(),
          Uri.parse(getString(R.string.res_path) + R.raw.scan_beep));

  if (Build.VERSION.SDK_INT >= 21) {
    mediaPlayerScan.setAudioAttributes(new AudioAttributes.Builder()
            .setUsage(AudioAttributes.USAGE_ALARM)
            .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
            .build());
  } else {
    mediaPlayerScan.setAudioStreamType(AudioManager.STREAM_ALARM);
  }
  mediaPlayerScan.prepare();
} catch (IOException e) {
  e.printStackTrace();
}

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