I am trying to write an application to trigger the Android camera at a fixed given time interval. I was testing it with TimerTask, however I read that I am not suppose to trigger the camera again until the JPEG is ready. Is there a method of triggering the camera at a fixed interval and letting the JPEG come when its ready and then trigger it again and let that next JPEG come when it's read, etc, without causing some sort of Heap Overflow? Is there a way to do this camera2?
Here are the relevant methods I have so far:
PictureCallback onPicTake=new PictureCallback() {
@Override
public void onPictureTaken ( byte[] bytes, Camera camera){
Log.d("data size",""+bytes.length);
Log.d("taken", "taken");
new SaveImageTask(getStorage()).execute(bytes);
resetCam();
}
};
Camera.ShutterCallback onShutter=new Camera.ShutterCallback()
{
@Override
public void onShutter () {
AudioManager mgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
mgr.playSoundEffect(AudioManager.FLAG_PLAY_SOUND);
}
};
private class CameraTrigger extends TimerTask{
public void run(){
mCamera.takePicture(onShutter, null, onPicTake);
}
}
preview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
timer = new Timer();
timer.schedule(new CameraTrigger(), 0, 1000);
}
});
private void resetCam() {
mCamera.startPreview();
preview.setCamera(mCamera);
}