2016-02-02 46 views
2

當android.widget.MediaController顯示時,我無法獲得Android應用程序(運行在Android 6.0上)以響應音量按鍵。顯示android.widget.MediaController時,Android應用程序無法識別音量按鍵

當片段中的按鈕被點擊時,媒體控制器將通過片段顯示。

已加載的片段的活性具有的onCreate以下代碼:

AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);   
this.setVolumeControlStream(AudioManager.STREAM_MUSIC); 

當媒體控制器沒有顯示,音量按鍵做調節音量和此音量調整確實的體積的影響由媒體控制器播放聲音。

但是,當媒體控制器在應用程序中顯示爲可見時,音量鍵將被忽略。我已經重寫了活動的onKeyDown方法來檢測何時識別按鍵,並且只有在媒體控制器不可見時才能識別它們。

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch (keyCode) { 
    case KeyEvent.KEYCODE_VOLUME_UP: 
     Log.i(TAG, "Increased volume"); 
     getAudioManager().adjustStreamVolume(AudioManager.STREAM_MUSIC, 
       AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI); 
     return true; 
    case KeyEvent.KEYCODE_VOLUME_DOWN: 
     Log.i(TAG, "Decreased volume"); 
     getAudioManager().adjustStreamVolume(AudioManager.STREAM_MUSIC, 
       AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI); 
     return true; 
    default: 
     return false; 
    } 
} 

用戶往往會想,當被聽到的聲音調節量,這是什麼時候,他們不能調整卷,事情的方式都在工作。如何更改媒體控制器行爲,以便識別音量按鍵?

回答

3

昨天有這個問題,並偶然發現你的問題。我知道這已經很老了,你可能找到了解決辦法,但我認爲我應該發佈一個答案,以防其他人在這裏找到方法。

你的第一個想法幫了我很大的忙,但並沒有重寫KeyEvents的處理程序,因爲我的活動是我爲MediaController做的。

我所做的是覆蓋public boolean dispatchKeyEvent(KeyEvent event)並初始化我MediaController對象是這樣的:

 mediaControls = new MediaController(this) { 

      @Override 
      public boolean dispatchKeyEvent(KeyEvent event) { 
       int action = event.getAction(); 
       int keyCode = event.getKeyCode(); 
       switch (keyCode) { 
        case KeyEvent.KEYCODE_VOLUME_UP: 
         if (action == KeyEvent.ACTION_DOWN) { 
          audioManager.adjustVolume(AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI); 
         } 
         break; 
        case KeyEvent.KEYCODE_VOLUME_DOWN: 
         if (action == KeyEvent.ACTION_DOWN) { 
          audioManager.adjustVolume(AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI); 
         } 
         break; 
        default: 
         return super.dispatchKeyEvent(event); 
       } 
       return true; 
      } 
     }; 

audioManager是我Activity的私有成員,並在創建同樣的方式在上面的問題。

希望這會幫助別人。

祝您生產愉快!