이 질문은 이미 요청되었지만 해결책을 찾지 못했습니다.setOnTouchListener에서 오디오를 녹음하려고 할 때 응용 프로그램이 충돌합니다.
내가 뭘하는지, MotionEvent.ACTION_DOWN
의 OnTouchListener
나는 오디오 녹음을 시작했고 MotionEvent.ACTION_UP
나는 오디오 녹음을 중단했다.
아이콘이 길면 잘 작동하지만 onclick
앱이 충돌합니다. I 앱이
이 질문은 이미 요청되었지만 해결책을 찾지 못했습니다.setOnTouchListener에서 오디오를 녹음하려고 할 때 응용 프로그램이 충돌합니다.
내가 뭘하는지, MotionEvent.ACTION_DOWN
의 OnTouchListener
나는 오디오 녹음을 시작했고 MotionEvent.ACTION_UP
나는 오디오 녹음을 중단했다.
아이콘이 길면 잘 작동하지만 onclick
앱이 충돌합니다. I 앱이
확인이 답변 Android mediarecorder stop failed 하고 또한 mediaRecorder 및 상태에 대한 offical 한 설명서를 참조하십시오. 레코딩 상태가 아닌 미디어 플레이어와 미디어 플레이어를 중지하면 충돌이 발생합니다. 레코딩 상태가 아닌 경우 donot call stop이 직접 중지됩니다.
try {
mRecorder.stop();
}
catch(RuntimeException e) {
}
finally {
mRecorder.release();
mRecorder = null;
}
은 아래와 같이 할 충돌되는 버튼을 클릭하고 때 여기, 여기 내
audio.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Toast.makeText(Chat.this, "You Have to hold the Button for audio recording.", Toast.LENGTH_LONG).show();
}
});
audio.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
MediaRecorderReady();
try {
mediaRecorder.prepare();
mediaRecorder.start();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} else if (event.getAction() == MotionEvent.ACTION_UP) {
if (mediaRecorder != null) {
mediaRecorder.stop();
}
}
return true;
}
});
public void MediaRecorderReady() {
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
mediaRecorder.setOutputFile(AudioSavePathInDevice);
}
내 문제가 있습니다.
private MediaRecorder myAudioRecorder;
private MediaPlayer mPlayer;
audio.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
initializeRecorder();
recordFile();
} else if (event.getAction() == MotionEvent.ACTION_UP) {
stopRecording();
}
return true;
}
});
private void initializeRecorder() {
File cacheDir = new File(Utils.SD_CARD, Utils.RECORDING_CACHE);
if (!(cacheDir.exists())) {
cacheDir.mkdirs();
}
outputFile = cacheDir + "/" + String.format("%s.m4a", System.currentTimeMillis());
mPlayer = new MediaPlayer();
myAudioRecorder = new MediaRecorder();
myAudioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
//original
myAudioRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
myAudioRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
myAudioRecorder.setOutputFile(outputFile);
}
private void recordFile() {
try {
myAudioRecorder.prepare();
myAudioRecorder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
private void stopRecording(){
myAudioRecorder.stop();
myAudioRecorder.release();
}
여기에 오류 로그를 게시하십시오. – UltimateDevil
java.lang.RuntimeException : 중지에 실패했습니다. android.media.MediaRecorder.stop (네이티브 메소드) – manjari
친절하게도 전체 logcat을 넣고 onclick onTouch를 누르면 ActionDown이 호출되는지 확인하고 ActionUp도 호출되는지 확인합니다. –