Регулятор громкости в приложении android
Я хотел бы знать, как управлять объемом моего приложения с клавиш тома (вопреки моему убеждению, я читал, что они контролируют только громкость звонка). Должен ли я перезаписать onKey Down/Up?
Или есть ли другой способ сделать это? Я спрашиваю, потому что, если я переписал указанную выше функцию для действия, функции получат событие только в том случае, если вид, связанный с этим действием, имеет фокус, и я ищу что-то "Глобал" (чтобы не работать вопрос, какая активность выполняется сейчас)
Ответы
Ответ 1
Был еще один вопрос давным-давно, который спросил то же самое. По сути, ответ: не переопределяйте кнопки onKeyDown и onKeyUp. Гораздо лучше просто использовать эту одну строку setVolumeControlStream(AudioManager.STREAM_MUSIC);
в вашем методе onCreate(). Это говорит операционной системе, что кнопки громкости должны влиять на громкость "носителя", когда ваше приложение видимо, и том, который он использует для вашего приложения.
Что касается управления объемом мультимедиа независимо от того, какое приложение видимо, я не уверен, что это можно сделать - или, если возможно, будет ли это хорошо.
Ответ 2
В своей деятельности вы можете использовать одно из следующих действий:
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
this.setVolumeControlStream(AudioManager.STREAM_RING);
this.setVolumeControlStream(AudioManager.STREAM_ALARM);
this.setVolumeControlStream(AudioManager.STREAM_NOTIFICATION);
this.setVolumeControlStream(AudioManager.STREAM_SYSTEM);
this.setVolumeControlStream(AudioManager.STREAM_VOICECALL);
Ответ 3
Надеемся, что этот рабочий код Android поможет вам разработать собственное приложение для управления томами:
public class audioSetting extends Activity {
Button b;
TextView t;
SeekBar s;
EditText e;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b = (Button)findViewById(R.id.button1);
s = (SeekBar)findViewById(R.id.seekBar1);
e = (EditText)findViewById(R.id.editText1);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
finish();
}
});
final AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
int a = audioManager.getStreamMaxVolume(AudioManager.STREAM_RING);
int c = audioManager.getStreamVolume(AudioManager.STREAM_RING);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
audioManager.setStreamVolume(AudioManager.STREAM_RING, (int)(Integer.parseInt(e.getText().toString().trim())), 0);
s.setProgress((int)(Integer.parseInt(e.getText().toString().trim())));
}
});
s.setMax(a);
s.setProgress(c);
e.setText(""+c);
s.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar arg0) {
}
@Override
public void onStartTrackingTouch(SeekBar arg0) {
}
@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
audioManager.setStreamVolume(AudioManager.STREAM_RING, arg1, 0);
e.setText(""+s.getProgress());
}
});
}
}
Ответ 4
Это старый вопрос, но есть превосходная библиотека для управления громкостью в Android (даже лучше, чем кнопки регулировки громкости, которые ограничены 5 приращениями уровня громкости).
http://code.google.com/p/media-volume-control
Взгляните на этот пакет, он обеспечивает непрерывный уровень громкости, а также другие приятные функции (например, когда звук прерывается, монитор громкости чтобы быть уведомленным, если/когда уровень громкости изменяется любыми средствами - ручным при показе тома SeekBar и т.д.).