在不更改系统中的主卷的情况下更改应用程序卷

时间:2015-06-29 11:12:47

标签: android

我有一个应用程序,我希望在不更改设备的主音量的情况下更改应用程序音量。我在此处附加了代码。如果我们从应用程序更改卷,则使用此代码,系统卷将更改。还有其他方法我可以处理吗?

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)
{

}

2 个答案:

答案 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