问题
I am trying to play sound via media player on STREAM_SYSTEM
using
mediaPlayer.setVolume(1.0f , 1.0f);
or
mediaPlayer.setVolume(0.90f , 0.90f);
But it is playing on vol as per Hardware volume controls in settings.
Basically this line has no effect.
I have added
permissions "Modify..." as well in Manifest
But i saw links in stackoverflow where this API works.
I don't wanna go to API
AudioManager.setStreamVol()....
as it sets stream vol for all apps
What is problem that this setVol API is not working??
Can anybody give a link to working sample??
回答1:
I faced the same issue. I thought that if I use 0.5f as parameter, I could tell the difference. I tried 0.2f, still no difference. So I thought there was a problem indeed. I finally tried 0.02f just in case, and finally I had a lower volume.
Sample:
replace your
mediaPlayer.setVolume(0.90f , 0.90f);
with
mediaPlayer.setVolume(0.09f , 0.09f);
回答2:
You must put the volume value between 0.0f and 1.0f. So 1.0f is 100% of the volume. Because of that your line has not effect.
回答3:
AudioManager audioManager;
int actualVolume;
audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
actualVolume = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, actualVolume + 1, AudioManager.FLAG_SHOW_UI);
The above code is taken from my working project, where it is used to increase the volume of the system (I used it for TV). You can use actualVolume - 1
to lower down the volume.
回答4:
Using AudioManager you can control the volume of media player.
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 20, 0);
also from MediaPlayer (But I didn't try that)
public void setVolume (float leftVolume, float rightVolume)
Since: API Level 1:
Sets the volume on this player. This API is recommended for balancing the output of audio streams within an application. Unless you are writing an application to control user settings, this API should be used in preference to setStreamVolume(int, int, int) which sets the volume of ALL streams of a particular type. Note that the passed volume values are raw scalars. UI controls should be scaled logarithmically.
Parameters:
leftVolume left volume scalar
rightVolume right volume scalar
来源:https://stackoverflow.com/questions/28087497/android-mediaplayer-setvolume-function-not-working