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耳机,是否可以做些什么?