In handset mode
Am.setspeakerphoneon (FALSE);
Setvolumecontrolstream (Audiomanager.stream_voice_call);
Am.setmode (Audiomanager.mode_in_call);
I use MediaPlayer audiotrack to adjust the volume always fails
At.setstereovolume (vol, vol);
Player.setvolume (Vol,vol);
Then decided to use Audiomanager to adjust the volume.
Audiomanager can modify the volume of the system's Android system
Here are some ways to adjust the volume of several audiomanager.
The first is to get Audiomanager instances:
Audiomanager am= (Audiomanager) Getsystemservice (Context.audio_service);
There are two ways to adjust the volume method, one is progressive, that is, like manually pressing the volume key, step by step increase or decrease, the other is to set the volume value directly.
1. Progressive type
public void Adjuststreamvolume (int streamtype, int direction, int flags)
Am.adjuststreamvolume (Audiomanager.stream_music, Audiomanager.adjust_raise, audiomanager.flag_show_ui);
Explain three parameters
The first streamtype is the type of volume you want to adjust, which is set to the media volume, which can be:
Stream_alarm Alarm
Stream_music Music playback is media volume
Stream_notification window at the top of the status bar NOTIFICATION,
Stream_ring Ringtones
Stream_system system
Stream_voice_call Call
STREAM_DTMF dual tone Multi-frequency, not very understand what things
The second direction, which is to adjust the direction, increase or decrease, can be:
Adjust_lower lowering the volume
Adjust_raise Raise the Volume
The adjust_same remains the same, which is used primarily to show the current volume to the user
The third flags are additional parameters that describe only two common
Flag_play_sound playing sound when you adjust the volume
FLAG_SHOW_UI Display the volume bar when adjusting, the one that appears when you press the volume key
2, directly set the volume value method:
public void Setstreamvolume (int streamtype, int index, int flags)
Am.setstreamvolume (Audiomanager.stream_music, Am.getstreammaxvolume (Audiomanager.stream_music), Audiomanager.flag_play_sound);
Am.getstreammaxvolume (Audiomanager.stream_voice_call);//Get the maximum value of the handset mode
Am.getstreamvolume (Audiomanager.stream_voice_call);//Get the current value of the handset mode
The first and third arguments are the same as the previous one
The second parameter is an int value of volume, getstreammaxvolume (int streamtype) is the maximum value of the volume of that type, you can calculate the volume you need based on this value, and I'm going to get to the maximum.
The last of My Code:
Package COM.LP;
Import Java.io.File;
Import Java.io.FileInputStream;
Import java.io.FileNotFoundException;
Import java.io.IOException;
Import Java.io.InputStream;
Import android.app.Activity;
Import Android.content.Context;
Import Android.media.AudioFormat;
Import Android.media.AudioManager;
Import Android.media.AudioTrack;
Import Android.os.Bundle;
Import Android.view.View;
Import Android.view.View.OnClickListener;
Import Android.widget.Button;
Import Android.widget.SeekBar;
/**
* Audiotrack play audio as WAV format
* and allow volume adjustment
* @author Administrator
*
*/
public class MainActivity5 extends Activity {
Private Button play;
Private Button stop;
Private SeekBar Soundvalue;
Private Audiotrack at;
Private Audiomanager AM;
@Override
public void OnCreate (Bundle savedinstancestate) {
Super.oncreate (savedinstancestate);
Setcontentview (R.LAYOUT.MAIN_SK);
am = (Audiomanager) getsystemservice (Context.audio_service);
Play = (Button) Findviewbyid (R.id.main_sk_play);
Stop = (Button) Findviewbyid (r.id.main_sk_stop);
Soundvalue = (SeekBar) Findviewbyid (R.id.skbvolume);
Setvolumecontrolstream (Audiomanager.stream_voice_call);
Play.setonclicklistener (New Onclicklistener () {
@Override
public void OnClick (View v) {
if (Am.isspeakerphoneon ()) {
Am.setspeakerphoneon (FALSE);
}
Setvolumecontrolstream (Audiomanager.stream_voice_call);
Am.setmode (Audiomanager.mode_in_call);
System.out.println (Am.getstreammaxvolume (Audiomanager.stream_voice_call));
System.out.println ("&&&&&&&&&&&&&");
System.out.println (Am.getstreamvolume (Audiomanager.stream_voice_call));
Am.setstreamvolume (streamtype, index, flags)
int buffersizeinbytes = Audiotrack.getminbuffersize (44100, Audioformat.channel_out_mono, AudioFormat.ENCODING_PCM_ 16BIT);
if (at==null) {
at = new Audiotrack (Audiomanager.stream_voice_call, 44100, Audioformat.channel_out_mono, audioformat.encoding_pcm_ 16BIT, Buffersizeinbytes, Audiotrack.mode_stream);
System.out.println ("22222");
At.setstereovolume (100f, 100f);
At.setstereovolume (0.7f, 0.7f);//Set Current volume size
New Audiotrackthread (). Start ();
}else{
if (At.getplaystate () ==audiotrack.playstate_playing) {
System.out.println ("111111111");
}else{
System.out.println ("33333");
at = new Audiotrack (Audiomanager.stream_voice_call, 44100, Audioformat.channel_out_mono, audioformat.encoding_pcm_ 16BIT, Buffersizeinbytes, Audiotrack.mode_stream);
New Audiotrackthread (). Start ();
}
}
}
});
Stop.setonclicklistener (New Onclicklistener () {
@Override
public void OnClick (View v) {
if (At.getplaystate () ==audiotrack.playstate_playing) {
try{
At.stop ();
}catch (IllegalStateException e)
{
E.printstacktrace ();
}
At.release ();
Am.setmode (Audiomanager.mode_normal);
}
}
});
Soundvalue.setmax (100);//volume adjustment limit
Soundvalue.setprogress (70);//Set the position value of the Seekbar
Soundvalue.setmax (Am.getstreammaxvolume (Audiomanager.stream_voice_call));
Soundvalue.setprogress (Am.getstreamvolume (Audiomanager.stream_voice_call));
Soundvalue.setonseekbarchangelistener (New Seekbar.onseekbarchangelistener () {
@Override
public void Onstoptrackingtouch (SeekBar SeekBar) {
float vol= (float) (seekbar.getprogress ())/(float) (Seekbar.getmax ());
SYSTEM.OUT.PRINTLN (vol);
At.setstereovolume (vol, vol);//Set volume
Am.setstreamvolume (Audiomanager.stream_voice_call, Seekbar.getprogress (), audiomanager.flag_play_sound);
}
@Override
public void Onstarttrackingtouch (SeekBar SeekBar) {
TODO auto-generated Method Stub
}
@Override
public void onprogresschanged (SeekBar SeekBar, int progress,
Boolean Fromuser) {
TODO auto-generated Method Stub
}
});
}
Class Audiotrackthread extends thread{
@Override
public void Run () {
byte[] out_bytes = new byte[44100];
InputStream is = Getresources (). Openrawresource (R.raw.start);
int length;
try{
At.play ();
}catch (IllegalStateException e)
{
E.printstacktrace ();
}
try {
while (length = Is.read (out_bytes))!=-1) {
System.out.println (length);
At.write (out_bytes, 0, length);
}
} catch (IOException e) {
E.printstacktrace ();
}
if (At.getplaystate () ==audiotrack.playstate_playing) {
try{
At.stop ();
}catch (IllegalStateException e)
{
E.printstacktrace ();
}
At.release ();
Am.setmode (Audiomanager.mode_normal);
}
}
}
}
Of course Permissions
<uses-permission android:name= "Android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name= "Android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name= "Android.permission.RECORD_AUDIO"/>
This article is from the Linux commune website (www.linuxidc.com) Source Link: http://www.linuxidc.com/Linux/2011-10/44660.htm
Android Audiomanager Solve MediaPlayer audiotrack Adjust volume q