【问题标题】:can't record audio via volume up button无法通过音量增大按钮录制音频
【发布时间】:2014-10-25 15:37:01
【问题描述】:

我正在尝试创建一个录制音频并播放它的应用程序。 它目前有 2 个按钮 - 1 个用于录制,1 个用于播放最后录制的声音。 当我按下录音按钮时,它完美无缺。

然后,我尝试通过捕获音量增大按钮单击来使其记录。(只要按下按钮就想使其记录)。

当我尝试从音量增大按钮录制时,它会抛出 IllegalStateException。

这就是我如何处理音量上的点击动作:

public boolean onKeyDown(int keyCode, KeyEvent event) {
 switch(keyCode){
   case KeyEvent.KEYCODE_VOLUME_UP:
     player.startRecording();
     return true;
 }
 return super.onKeyDown(keyCode, event);
}
public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch(keyCode){
    case KeyEvent.KEYCODE_VOLUME_UP:
            player.stopRecording();
            return true;
        }

    return super.onKeyUp(keyCode, event);
}

提前谢谢你的英语不好

【问题讨论】:

    标签: android key media volume recorder


    【解决方案1】:

    当您按住音量增大按钮时,它会继续触发 onKeyDown 事件。在每个这样的调用中它都会调用 player.stopRecording();...这可能会导致问题,,,试试下面的逻辑...

    public class MainActivity extends ActionBarActivity {
    
    int keyStatus=0;//public variable, 0=key released,1=key pressed
    
    //
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
         switch(keyCode){
           case KeyEvent.KEYCODE_VOLUME_UP:
             //player.startRecording();
               if(keyStatus==0){
                   keyStatus=1;//setting this to 1 to ensure that this block is called only once during the key pressed state
                   Log.d("msg", "startRecording()");
               }
             return true;
         }
         return super.onKeyDown(keyCode, event);
        }
    @Override
        public boolean onKeyUp(int keyCode, KeyEvent event) {
            switch(keyCode){
            case KeyEvent.KEYCODE_VOLUME_UP:
                   Log.d("msg", "stopRecording()");
                   keyStatus=0;//reset keyStatus on key up event.
                    return true;
                }
    
            return super.onKeyUp(keyCode, event);
        }
    
    //
    

    【讨论】:

    • 不知道如果您按住它,它会不断重复点击。如果你问我有点奇怪。无论如何,谢谢你的帮助!
    【解决方案2】:
    @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) {
                    //TODO
                }
                return true;
            case KeyEvent.KEYCODE_VOLUME_DOWN:
                if (action == KeyEvent.ACTION_DOWN) {
                    //TODO
                }
                return true;
            default:
                return super.dispatchKeyEvent(event);
            }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      相关资源
      最近更新 更多