2010-03-29 3 views
36

Я хотел бы знать, как управлять объемом моего приложения с клавиш громкости (вопреки моему убеждению, я прочитал, что они контролируют только громкость звонка). Должен ли я перезаписать onKey Down/Up?Регулятор громкости в приложении android

Или есть другой способ для этого? Я спрашиваю, потому что, если я переписал указанную выше функцию для действия, функции получат событие только в том случае, если вид, связанный с этим действием, имеет фокус, и я ищу что-то «Глобал» (чтобы не работать вопрос, какая деятельность сейчас выполняется)

ответ

67

Был еще один question from a long time ago, который спросил то же самое. По сути, ответ: не переопределяйте кнопки onKeyDown и onKeyUp. Гораздо лучше просто использовать эту одну строку setVolumeControlStream(AudioManager.STREAM_MUSIC); в вашем методе onCreate(). Это говорит ОС, что кнопки громкости должны влиять на громкость «носителя», когда ваше приложение видимо, и это том, который он использует для вашего приложения.

Что касается контроля объема мультимедиа независимо от того, какое приложение видно, я не уверен, что это можно сделать - или если бы это было возможно, то это было бы хорошо.

+0

Дела в том, что я Мне интересно работать только при работе моего приложения, у меня нет желания заставить его работать, если активность из другого приложения находится в верхней части стека активности. –

+0

Спасибо! Думаю, это может сработать для меня! Есть ли какие-либо предложения в отношении того, какую деятельность следует добавить в эту строку? –

+0

Поместите его в свой метод onCreate() любой активности, которая будет создавать звук. –

0

Это старый вопрос, но есть превосходная библиотека для управления громкостью в андроиде (даже лучше, чем кнопки регулировки громкости, которые ограничены 5 приращениями уровня громкости).

http://code.google.com/p/media-volume-control

Посмотрите на this package, он обеспечивает непрерывный уровень громкости, а также другие полезные функции (например, если звук прерывается, громкость монитора, чтобы получать уведомления, если/когда уровень громкости изменяется любыми средствами --handdy при показе тома SeekBar и т. д.).

10

В вашей деятельности вы можете использовать один из следующих вариантов:

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); 
1

Надеется, что это работает 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()); 
       } 
      }); 
     } 
} 
Смежные вопросы