2011-03-26 289 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; 

}