안드로이드 개발 질문/답변
(글 수 45,052)
package min.Dandelion;
import java.io.File; import java.io.IOException;
import android.app.Activity; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.os.Handler; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.Toast; import android.widget.VideoView;
public class video extends Activity {
/** Called when the activity is first created. */ private MediaRecorder mRecorder; private VideoView VideoView01; //private View VideoFrame; private boolean touchOn = true;
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.video);
//VideoFrame = (View)findViewById(R.id.VideoFrame); VideoView01 = (VideoView)findViewById(R.id.VideoView01); //VideoFrame.setOnTouchListener(videoTouchListener); VideoView01.requestFocus();
VideoView01.setVideoPath("/sdcard/testvideo.mp4"); VideoView01.setVideoPath("/sdcard/testvideo.mp4"); VideoView01.start();
VideoView01.postDelayed(new Runnable() { public void run() { VideoView01.pause(); Toast toast = Toast.makeText(getBaseContext(), "터치하기", Toast.LENGTH_LONG); toast.show(); //터치 VideoView01.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub
if( touchOn == true ){
if( !VideoView01.isPlaying())
VideoView01.start(); VideoView01.postDelayed(new Runnable() { public void run() { VideoView01.pause(); Toast toast = Toast.makeText(getBaseContext(), "마이크 불기", Toast.LENGTH_LONG); toast.show(); startRec(); mRecRunnable.run(); } }, 14000); touchOn=false; } else ; return true; } }); } }, 3000);
}
public void startRec() {
makeRecFile(); mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); mRecorder.setOutputFile(tmpFile.getAbsolutePath());
mRecorder.setMaxDuration( 30 * 1000);
// Handle IOException try { mRecorder.prepare(); } catch(IOException exception) { Log.e("REC", "ERROR: Can't Prepare Recorder"); mRecorder.reset(); mRecorder.release(); mRecorder = null; return; } mRecorder.start(); } private File tmpFile; private void makeRecFile() { String tmpFileName = "/sdcard/" + "tmp.amr";
tmpFile = new File( tmpFileName ); if( tmpFile.exists()) tmpFile.delete(); tmpFile = new File(tmpFileName); Log.e("REC", "Tmp file: " + tmpFile.getAbsolutePath()); }
private Handler mRecHandler = new Handler(); private Runnable mRecRunnable = new Runnable() {
public void run() { if( mRecorder != null ) { int getAmp = mRecorder.getMaxAmplitude(); if( getAmp > 25000 ) { Log.e("AMP", "AMP: " + getAmp ); if( VideoView01 != null ) VideoView01.start(); return; } } mRecHandler.postDelayed(this, 1000); } };
@Override protected void onDestroy() { super.onDestroy(); if( mRecorder != null ) { mRecorder.reset(); mRecorder.release(); mRecorder = null; } if( VideoView01 != null ) { VideoView01.pause(); VideoView01.stopPlayback(); VideoView01 = null; } if( tmpFile != null ) if( tmpFile.exists()) tmpFile.delete(); } }
14초에서 영상이 멈춘 후에 마이크 입력값을 받으면 다시 영상이 재생되어야 하는데요,
단말기에서 실행해 본 결과, 14초에서 영상이 멈춘 상태로 마이크를 불어도 반응이 없습니다.
어느 부분에 문제가 있는 걸까요?