2010-03-29 17 views
36

Chciałbym wiedzieć, jak kontrolować głośność aplikacji z klawiszy głośności (wbrew moim przekonaniom, czytałem, że kontrolują tylko głośność dzwonka). Czy powinienem zastąpić OnKey Down/Up?Regulacja głośności w aplikacji Android

Czy jest jeszcze inny sposób, aby to osiągnąć? Pytam, ponieważ jeśli nadpiszę wyżej wymienioną funkcję dla działania, funkcje będą odbierać zdarzenia tylko wtedy, gdy skupi się widok związany z tym działaniem i szukam czegoś "Globalnego" (do pracy nie Niezależnie od aktywności pracuje teraz)

Odpowiedz

67

Nie było innego question from a long time ago że poprosił samo. Zasadniczo odpowiedź brzmi: nie zastępuj przycisków onKeyDown i onKeyUp. Znacznie lepiej jest po prostu użyć tej jednej linii setVolumeControlStream(AudioManager.STREAM_MUSIC); w swojej metodzie onCreate(). Mówi to systemowi operacyjnemu, że przyciski głośności powinny wpływać na głośność "multimediów", gdy aplikacja jest widoczna, i to jest objętość używana w aplikacji.

Co do kontrolowania głośności multimediów bez względu na to, co aplikacja jest widoczna, nie jestem pewien, co można zrobić - czy to dało, czy byłaby to dobra rzecz.

+0

Chodzi o to, że ja” Jestem zainteresowany działaniem tylko wtedy, gdy działają aplikacje mojej aplikacji, nie mam żadnej chęci, aby działało, jeśli działanie z innej aplikacji jest na szczycie stosu aktywności –

+0

Dzięki! Myślę, że to może dla mnie zadziałać! Czy jest jakaś sugestia, w jaki sposób należy dodać tę linię? –

+0

Umieść go w swojej metodzie onCreate() dla każdego działania, które będzie wytwarzać dźwięk. –

0

To stara sprawa, ale jest tam wspaniała biblioteka do czynienia z regulacją głośności w android (nawet lepsze niż przyciski głośności, które są ograniczone do 5 skokiem poziomu głośności).

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

Spójrz na this package, zapewnia poziom głośności ciągły, jak również innych ciekawych funkcji (takich jak, kiedy dźwięk jest przerywany, monitor objętość być powiadamiany jeśli/kiedy głośność jest zmieniana za pomocą dowolnych środków --handdy przy wyświetlaniu woluminu SeekBar itp.).

10

W swojej działalności można użyć jednej z następujących czynności:

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

nadzieję, że to działa kod android pomogą Ci opracować własną aplikację Regulacja głośności:

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()); 
       } 
      }); 
     } 
} 
Powiązane problemy