【问题标题】:Playing an alarm sound while device's media volume is off在设备的媒体音量关闭时播放警报声
【发布时间】:2017-12-17 18:21:55
【问题描述】:

我正在创建一种警报类型的应用程序。当我打开特定活动时,我想播放具有设备警报音量级别的自定义声音。 如果设备的媒体音量已关闭且闹钟音量已打开,则应播放我的自定义声音。

我已经尝试了什么:

 private void playAlarmSound(String fileName) {
    MediaPlayer p = new MediaPlayer();
    AudioManager audioManager= (AudioManager) getSystemService(AUDIO_SERVICE);
    try {
        AssetFileDescriptor afd = this.getAssets().openFd(fileName);
        int volumeLevel=audioManager.getStreamVolume(AudioManager.STREAM_ALARM);
        p.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
        p.setVolume(volumeLevel,volumeLevel);
        afd.close();
        p.prepare();
    } catch (Exception e) {
        e.printStackTrace();
    }
    p.start();
}

但是,当媒体音量打开时,它正在播放声音,但当媒体音量关闭时,它不播放声音。

【问题讨论】:

    标签: android android-mediaplayer android-audiomanager


    【解决方案1】:

    您正在读取警报音量级别,但这并不意味着音频将通过该流播放。

    您需要在MediaPlayer上构建并设置AudioAttributes,表示USAGE_ALARM。

    换句话说:

    p.setAudioAttributes(
        new AudioAttributes.Builder()
            .setUsage(AudioAttributes.USAGE_ALARM)
            .build()
    );
    

    【讨论】:

    • 感谢 jmart。它工作正常。但是“setAudioAttributes”仅在 API 级别 21 以上可用。21 以下呢?
    • 在 api 21 之前你需要在 MediaPlayer 中使用 setAudioStreamType。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多