我的耳机中心按钮有问题。 我想要做的是在按下耳机按钮的同时录制声音。释放按钮后,录音停止。 这是我的代码:
@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代码),一切正常(声音是记录)。
我只想知道是否可以在按下中置耳机按钮的情况下录制声音,或者是硬件问题,我无能为力。
答案 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)
事件中停止了你的自我:)