2011-03-26 279 views
6

使用下面的代碼我已經停止使用音量按鈕,除非我是流式音頻(否則它令人討厭地改變了鈴聲音量),但是「後退」按鈕不起作用。android - 覆蓋音量按鈕影響後退按鈕?

按'回'應該到我的手機桌面(或退出我的應用程序,就像你所期望的),但它沒有做任何事情。如果我打開菜單,「返回」將按照它應該關閉菜單,但我不能離開應用程序。

我抄代碼到其他活動我的應用程序中,如果我打開我的應用程序內的其他活動,因爲「後退」按鈕不工作,我不能回到主屏幕:)

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    //Suppress the use of the volume keys unless we are currently listening to the stream 
    if(keyCode==KeyEvent.KEYCODE_VOLUME_UP) { 
     if(StreamService.INT_PLAY_STATE==0){ 
      return true; 
     }else{ 
      return false; 
     } 
    } 
    if(keyCode==KeyEvent.KEYCODE_VOLUME_DOWN) { 
     if(StreamService.INT_PLAY_STATE==0){ 
      return true; 
     }else{ 
      return false; 
     } 
    } 
return false; 

這是爲什麼發生?

+0

是否會影響 – katsharp 2011-03-26 23:08:50

+0

任何其他按鈕確定你想停止用戶改變他們的鈴聲音量? Android設備上的正常行爲是在沒有聲音播放時更改鈴聲音量,並且無論您在何種應用程序中更改媒體音量。這就是用戶期望通過以往體驗發生的事情。正如你所擁有的,他們需要關閉你的應用來改變鈴聲音量。如果我是你的用戶,我會稱之爲煩惱而不是功能。 – LouieGeetoo 2011-03-26 23:11:25

+0

嗨Louie,是的,我同意它的音頻流應用程序,大多數用戶告訴我它討厭他們打開應用程序,點擊監聽(在流連接時有兩秒或兩秒的停頓時間),他們先發制人地降低音量如果它太響了,反而鈴聲量下降。 – jwbensley 2011-03-26 23:16:18

回答

5

沒有測試過,但我認爲你需要包括別的地方調用super.onKeyDown,即:

if(keyCode == KeyEvent.KEYCODE_VOLUME_UP) { 
    code 
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { 
    more code 
} else { 
    super.onKeyDown(keyCode, event); 
} 

否則,你捕捉所有鍵碼和檢查體積後的代碼返回false 。

+0

感謝指出了這一點:)這是最後的工作代碼,我有: @覆蓋 公共布爾的onkeydown(INT的keyCode,KeyEvent的事件){ 如果(的keyCode == KeyEvent.KEYCODE_VOLUME_UP){ 如果(StreamService.INT_PLAY_STATE == 0){ return true; } else { return false; } } else if(keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){ if(StreamService。INT_PLAY_STATE == 0){ return true; } else { return false; } } else { super.onKeyDown(keyCode,event); } return false; } – jwbensley 2011-03-26 23:21:45

+1

褲子,沒有出來,因爲我已經奠定了:)對於其他人有同樣的錯誤在這裏:http://pastebin.com/cJ7Uq0TV – jwbensley 2011-03-26 23:22:24

3

老兄,只是改變該活動媒體音量的音頻情境:

http://developer.android.com/reference/android/media/AudioManager.html

編輯:

private AudioManager audio; 

裏面的onCreate:

audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 

覆蓋的onkeydown:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    switch (keyCode) { 
    case KeyEvent.KEYCODE_VOLUME_UP: 
     audio.adjustStreamVolume(AudioManager.STREAM_MUSIC, 
       AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI); 
     return true; 
    case KeyEvent.KEYCODE_VOLUME_DOWN: 
     audio.adjustStreamVolume(AudioManager.STREAM_MUSIC, 
       AudioManager.ADJUST_LOWER, AudioManager.FLAG_SHOW_UI); 
     return true; 
    default: 
     return false; 
    } 
} 
5

更簡單和更可靠的方法有音量鍵隨時控制媒體音量是插入該行到您的活動的onCreate()

setVolumeControlStream(AudioManager.STREAM_MUSIC); 
+0

嗨,謝謝你。其他人回答了我原來的問題,但事實上我已經將我的代碼換成了這個,它是一個更好的方法IMO。謝謝 :) – jwbensley 2011-03-29 19:17:55

0
public boolean onKeyDown(int keyCode, KeyEvent event) { 

    if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { 
     //your code 
     return true; 

    } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { 
     //your code 
     return true; 
    } else { 

     super.onKeyDown(keyCode, event); 
    } 


    return true; 

}