PDA

View Full Version : How do i implement background video recording in android?



imso
03-30-2011, 09:48 PM
How am i going to allow background video recording after i leave the application,or received an sms/call and when i'm come back its still recording and data was not lost because i'm creating an car blackbox android device?? Can someone guide me along, I've tried reading the android developer and other websites on services but still i'm lost on how to integrate it into my codes... Sry i'm kinna new in programming..


public class CameraTest extends Activity implements SurfaceHolder.Callback {

private static final String TAG ="CAMERA_TUTORIAL";

private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private Camera camera;
private boolean previewRunning;

File tempFile = null;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

surfaceView = (SurfaceView)findViewById(R.id.surface_camera);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(this);

surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_P USH_BUFFERS);

Button btnStart = (Button) findViewById(R.id.button4);
btnStart.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
startRecording();
}

});

Button btnStop = (Button) findViewById(R.id.button5);
btnStop.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
stopRecording();
}

});
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
camera = Camera.open();
if (camera != null) {
Camera.Parameters params = camera.getParameters();
camera.setParameters(params);
}
else {
Toast.makeText(getApplicationContext(), "Camera not available!", Toast.LENGTH_LONG).show();
finish();
}
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if (previewRunning) {
camera.stopPreview();
}
Camera.Parameters p = camera.getParameters();
p.setPreviewSize(320, 240);
p.setPreviewFormat(PixelFormat.JPEG);
camera.setParameters(p);

try {
camera.setPreviewDisplay(holder);
camera.startPreview();
previewRunning = true;
}
catch (IOException e) {
Log.e(TAG,e.getMessage());
e.printStackTrace();
}
}

@Override
public void surfaceDestroyed(SurfaceHolder holder){
camera.stopPreview();
previewRunning = false;
camera.release();
}



private MediaRecorder mediaRecorder;
private final int maxDurationInMs = 20000;
private final int videoFramesPerSecond = 20;

public boolean startRecording(){
try {
camera.unlock();

mediaRecorder = new MediaRecorder();

mediaRecorder.setCamera(camera);

mediaRecorder.setAudioSource(MediaRecorder.AudioSo urce.MIC);

mediaRecorder.setVideoSource(MediaRecorder.VideoSo urce.CAMERA);

mediaRecorder.setOutputFormat(MediaRecorder.Output Format.DEFAULT);

mediaRecorder.setMaxDuration(maxDurationInMs);




mediaRecorder.setAudioEncoder(MediaRecorder.AudioE ncoder.DEFAULT);

mediaRecorder.setVideoEncoder(MediaRecorder.VideoE ncoder.DEFAULT);

//mediaRecorder.setOutputFormat(MediaRecorder.Output Format.DEFAULT);

tempFile = new File(Environment.getExternalStorageDirectory(),"1.3gp");
mediaRecorder.setOutputFile(tempFile.getPath());

mediaRecorder.setVideoSize(surfaceView.getWidth(), surfaceView.getHeight());

//mediaRecorder.setVideoFrameRate(videoFramesPerSeco nd);

mediaRecorder.setPreviewDisplay(surfaceHolder.getS urface());


mediaRecorder.prepare();
mediaRecorder.start();
return true;

} catch (IllegalStateException e) {
Log.e(TAG,e.getMessage());
e.printStackTrace();
return false;
} catch (IOException e) {
Log.e(TAG,e.getMessage());
e.printStackTrace();
return false;
}
}

public void stopRecording(){
mediaRecorder.stop();
camera.lock();
}
}