Mar*_*coS 20 audio android volume
我知道这个问题可以被视为"政治上不正确",但我正在设计一个应用程序,"按设计"必须引起人们在最大可能距离范围内的注意,否则它将不会被使用...... :-)
我目前正在使用SoundManager类,这是播放我的ogg剪辑的代码:
public void playSound(int index) {
int streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 0, 0, 1.0f);
}
Run Code Online (Sandbox Code Playgroud)
问题是我播放剪辑的音量似乎取决于用户设置的"设置/音频/ Voulme"设置.相反,它似乎与硬件音量按钮设置无关.
Android应用有没有办法播放设备允许的最大物理音量?
zee*_*ker 42
我建议使用getStreamMaxVolume和setStreamVolume来执行此操作:
int origionalVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0);
Run Code Online (Sandbox Code Playgroud)
然后,一旦完成,只需将其设置回原始卷.
我想我被击败了,啊啊:)
实际上这样做的一些代码,我使用的是MediaPlayer而不是soundpool,因为这会给你一个播放完整的回调,它似乎没有出现在soundpool上:
final AudioManager mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
final int originalVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0);
MediaPlayer mp = new MediaPlayer();
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setDataSource("content://media/internal/audio/media/97");
mp.prepare();
mp.start();
mp.setOnCompletionListener(new OnCompletionListener()
{
@Override
public void onCompletion(MediaPlayer mp)
{
mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC, originalVolume, 0);
}
});
Run Code Online (Sandbox Code Playgroud)
顺便说一句,调用mSoundPool.play(mSoundPoolMap.get(index), streamVolume, streamVolume, 0, 0, 1.0f);streamVolume值实际上是浮点数0 - > 1表示最大值的百分比,所以你真的只想在那里输入1.0f.
您可以在播放音频之前调整设置.
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.getStreamMaxVolume(), 0);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
31918 次 |
| 最近记录: |