Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用耳机按钮录制声音_Android_Audio Recording_Headset - Fatal编程技术网

Android 使用耳机按钮录制声音

Android 使用耳机按钮录制声音,android,audio-recording,headset,Android,Audio Recording,Headset,我的耳机中央按钮有问题。 我想做的是在按下耳机按钮时录制声音。松开按钮后,音频录制停止。 这是我的密码: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); text = (TextView) findViewById(R.id.text); } public

我的耳机中央按钮有问题。 我想做的是在按下耳机按钮时录制声音。松开按钮后,音频录制停止。 这是我的密码:

@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中移动录音机代码),一切正常(声音被录制)


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

在您的if条件中包含此代码

现在应该是这样

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


您正在
onKeyUp(int-keyCode,KeyEvent-event)
event:)

抱歉,由于硬件原因,无法完成此操作

Android耳机插孔有4个连接:Tip=LeftAudio、Ring=RightAudio、Ring2=Ground、Sleeve=Mic。(我可能将环2和接地反转)。HeadsetHook按钮通过短路环2和套筒来发送信号。因此,当按下时,话筒会短路,这就解释了为什么要录制静音。烂透了。我做不到

您可以选择在onKeyDown上开始录制,再次单击时停止录制。即使这样也不简单,因为如果按下按钮的时间足够长,您将获得多个onKeyDowns。因此,跳过onKeyDown并使用onkeydup。它避免了“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;
}

请注意,您将在结束单击时录制静音。

这会导致键盘上出现NullPointerException onKeyDownsorry,我的问题,但录制音频时麦克风仍处于禁用状态。但是,如果我们使用microusb耳机,是否可以做些什么?