2017-12-17 23 views
2

アラームの種類のアプリケーションを作成しています。特定のアクティビティを開くと、デバイスのアラーム音量でカスタムサウンドを再生したいとします。 デバイスのメディアボリュームがオフで、アラーム音量がオンの場合、カスタムサウンドが再生されます。私はすでに試してみました何デバイスのメディアボリュームがオフのときにアラーム音を鳴らす

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(); 
} 

しかし、これによって

それは音を再生しているが、メディアボリュームがオフのときにサウンドを再生されていない上、メディアの容量があります。

答えて

1

アラーム音量レベルを読み込んでいますが、これはオーディオがそのストリームで再生されることを意味するものではありません。

MediaPlayerにAudioAttributesを作成して設定する必要があります(USAGE_ALARMを示す)。言い換えれば

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

ありがとうjmart。それは正常に動作しています。 "setAudioAttributes"はAPIレベル21より上でのみ使用できます.21以下はどうですか? – Shivam

+0

api 21の前に、MediaPlayerでsetAudioStreamTypeを使用する必要があります。 – jmart

関連する問題