使用耳机按钮录制声音

时间:2012-12-03 13:21:05

标签: android audio-recording headset

我的耳机中心按钮有问题。 我想要做的是在按下耳机按钮的同时录制声音。释放按钮后,录音停止。 这是我的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    text = (TextView) findViewById(R.id.text);

}

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_HEADSETHOOK && shouldContinue == true) {
        shouldContinue = false;
        text.setText("KEY DOWN");

                    audioRecorder = new MediaRecorder();
                    audioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                    audioRecorder
                            .setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                    audioRecorder
                            .setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                    audioRecorder.setOutputFile(Environment
                            .getExternalStorageDirectory().getAbsolutePath()
                            + "/test.3gp");

                    try {
                        audioRecorder.prepare();

                    } catch (IllegalStateException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    audioRecorder.start();
                }
    return false;
}


public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_HEADSETHOOK) {
        text.setText("KEY UP");
        audioRecorder.stop();
        audioRecorder.release();
        shouldContinue=true;

    }
    return false;
}

问题是,当我按住我的耳机按钮时,麦克风会以某种方式禁用并导致空声音文件,但是没有按住该按钮(例如,如果我在onCreate中移动audioRecorder代码),一切正常(声音是记录)。

我只想知道是否可以在按下中置耳机按钮的情况下录制声音,或者是硬件问题,我无能为力。

2 个答案:

答案 0 :(得分:2)

抱歉,但我认为由于硬件原因无法完成。

Android耳机插孔有4个连接:Tip = LeftAudio,Ring = RightAudio,Ring2 = Ground,Sleeve = Mic。 (我可能有Ring2& Ground反转)。 HeadsetHook按钮通过短接Ring2和Sleeve发送信号。因此,按下它会使麦克风短路,这就解释了为什么要录制静音。吮吸。不能做PushToTalk。

您可以选择在onKeyDown上开始录制,并在再次单击时停止录制。即使这不是直截了当的,因为如果按下按钮的时间足够长,你将获得多个onKeyDowns。因此,跳过onKeyDown并使用onKeyUp。它避免了“Google Now”MediaButton的麻烦。有点像...

boolean recording = false;

// don't need to override onKeyDown()
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_HEADSETHOOK) {
        if (recording)
            stopAndSaveRecording();
        else
            startRecording();
        recording = ! recording;
    }
    return true;
}

请注意,您将在结束点击期间录制静音。

答案 1 :(得分:0)

在if条件中包含此代码

现在它应该是这样的。

  if (keyCode == KeyEvent.KEYCODE_HEADSETHOOK && shouldContinue == true && event.getAction() == KeyEvent.ACTION_DOWN)

更新

你在onKeyUp(int keyCode, KeyEvent event)事件中停止了你的自我:)