我有一个应用程序,我希望在不更改设备的主音量的情况下更改应用程序音量。我在此处附加了代码。如果我们从应用程序更改卷,则使用此代码,系统卷将更改。还有其他方法我可以处理吗?
enter code here
private Dialog showVolumeChangeableDialog()
{
Dialog dialog = new Dialog(getActivity());
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.volume_changeable_dialog);
muteUnMuteButton=(Button)dialog.findViewById(R.id.volume_mute);
muteUnMuteButton.setOnClickListener(this);
volumeSeekbar = (SeekBar)dialog.findViewById(R.id.volume_seekBar);
volumeSeekbar.setMax(audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC));
setVolumeProgressState();
volumeSeekbar.setOnSeekBarChangeListener(this);
changeStateIfRequired(audioManager.getStreamVolume(AudioManager.STREAM_MUSIC));
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(dialog.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.CENTER;
dialog.getWindow().setAttributes(lp);
// dialog.show();
return dialog;
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
{
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC,progress, 0);
changeStateIfRequired(progress);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar)
{
}
@Override
public void onStopTrackingTouch(SeekBar seekBar)
{
}
答案 0 :(得分:0)
您可以使用以下方式保存当前音量:
currentVol = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
然后根据您的要求更改音量。在关闭对话框时恢复已保存的音量。
答案 1 :(得分:0)
通过使用下面的代码我们可以完全控制,首先用OnAudioFocusChangeListener实现你的活动
//检查HeadSet是否为插件
AudioManager audioManager = (AudioManager)getApplicationContext().getSystemService(Context.AUDIO_SERVICE);
@SuppressWarnings("deprecation")
boolean isHeadSeton=audioManager.isWiredHeadsetOn();
audioManager.setMode(isHeadSeton?AudioManager.MODE_IN_COMMUNICATION:AudioManager.MODE_IN_COMMUNICATION);
audioManager.setSpeakerphoneOn(!isHeadSeton);
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
//为扬声器设置中等音量
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, 3, 0);
// 3可以改变设备到设备,因此,动态计算并传递它。
此代码我们也可以在BroadCastReciever(用于耳机插件或插件)或oncreate()方法中使用,如 -
HeadsetConnectionReceiver headset=new HeadsetConnectionReceiver();
registerReceiver(headset, new IntentFilter(Intent.ACTION_HEADSET_PLUG));
// App正在控制其他音频(背景音乐,FM等......)
int req=audioManager.requestAudioFocus(this, AudioManager.STREAM_SYSTEM, AudioManager.AUDIOFOCUS_GAIN);
现在在OnPause()方法中释放音频焦点
audioManager.abandonAudioFocus(this);
并将音量设为正常。
参考链接 - http://developer.android.com/training/managing-audio/audio-focus.html