I'm creating an android application which act like a car blackbox, but
i run into problem as soon i start doing it, maybe partly because i'm
new to android/java but i've given 6more weeks to develop this
app... :'(

But get back to my problem i had my service run the video recording
processes in the background so i should be able to leave the app for a
while and come back to the Video recording GUI with the surfaceview
but my application was force to close when i return to the app. So is
the problem related to onResume() method or something else? If its yes
what i should do in order to get my application GUI to return to the
video recording surfaceview and still running the background recording
using the service rather than giving me an error?

Can someone please help me, i've really exhausted all ideas and to
make it worse i'm new to java/android thus making me very headache, i
really need some experience programmer to help me solve the
problem...

public class CameraTest extends Activity implements
SurfaceHolder.Callback {

        private static final String TAG = "Exception";

        public static SurfaceView surfaceView;
        public static SurfaceHolder surfaceHolder;
        public static Camera MainCamera;
        public static boolean previewRunning;

    @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_PUSH_BUFFERS);

        Button btnStart = (Button) findViewById(R.id.button4);
        btnStart.setOnClickListener(new View.OnClickListener()
        {
                public void onClick(View v)
                {
                        startService(new Intent(getApplicationContext(),
ServiceRecording.class));
                }
        });

        Button btnStop = (Button) findViewById(R.id.button5);
        btnStop.setOnClickListener(new View.OnClickListener()
        {
                public void onClick(View v)
                {
                        stopService(new Intent(getApplicationContext(),
ServiceRecording.class));
                }
        });
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        MainCamera = Camera.open();
        if (MainCamera != null) {
                Camera.Parameters params = MainCamera.getParameters();
                MainCamera.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) {
                MainCamera.stopPreview();
        }

        Camera.Parameters p = MainCamera.getParameters();
        p.setPreviewSize(320, 240);
        p.setPreviewFormat(PixelFormat.JPEG);
        MainCamera.setParameters(p);

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

    @Override
    public void onResume(){
        super.onResume();

    }

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

My RecordingService.java Service file
public class ServiceRecording extends Service {

        @Override
        public IBinder onBind(Intent intent) {
                // TODO Auto-generated method stub
                return null;
        }

        private SurfaceView surfaceView;
        private SurfaceHolder surfaceHolder;
        public static Camera ServiceCamera;
        private boolean RecordingStatus;
        private MediaRecorder mediaRecorder;
    private final int maxDurationInMs = 20000;

    private static final String TAG = "Exception";

    @Override
    public void onCreate() {
        super.onCreate();

        RecordingStatus = false;
        ServiceCamera = CameraTest.MainCamera;
        surfaceView = CameraTest.surfaceView;
        surfaceHolder = CameraTest.surfaceHolder;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        super.onStartCommand(intent, flags, startId);
        if (RecordingStatus == false)
                startRecording();

        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();

        stopRecording();
        RecordingStatus = false;
    }

    public boolean startRecording(){
        try {
                        Toast.makeText(getBaseContext(), "Recording Started",
Toast.LENGTH_SHORT).show();
                        try{
                                ServiceCamera.unlock();
                        }
                        catch(Exception e){

                                ServiceCamera.reconnect();
                        }

                        mediaRecorder = new MediaRecorder();

                        mediaRecorder.setCamera(ServiceCamera);

                        
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

                        
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

 
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);

                        mediaRecorder.setMaxDuration(maxDurationInMs);

 
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

 
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);

                                //
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
                                DateFormat dateFormat = new 
SimpleDateFormat("yyyy-MM-dd
HH_mm_ss");
                                Date date = new Date();
                                File directory = new
File(Environment.getExternalStorageDirectory() + "/VideoList");

                                if(!(directory.exists()))
                                        directory.mkdir();

                                File FileSaved = new
File(Environment.getExternalStorageDirectory() + "/VideoList",
dateFormat.format(date) + ".3gp");
                                
mediaRecorder.setOutputFile(FileSaved.getPath());

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

                                
//mediaRecorder.setVideoFrameRate(videoFramesPerSecond);

                                
mediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());

                                mediaRecorder.prepare();
                                mediaRecorder.start();

                                RecordingStatus = true;

                                return true;
        }

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

    public void stopRecording() {
        Toast.makeText(getBaseContext(), "Recording Stopped",
Toast.LENGTH_SHORT).show();
        mediaRecorder.stop();

        try {
                ServiceCamera.reconnect();
                } catch (IOException e) {
                        e.printStackTrace();
                }
        RecordingStatus = false;
    }
}

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to