Why can't my GUI return back to recording mode?

Put your problem here if it does not fit any of the other categories.

Why can't my GUI return back to recording mode?

Postby imso » Thu Apr 07, 2011 3:23 pm

I had my service to run the video recording processes in the background so it should be find that i can leave the app a while and come back to the GUI with the same surfaceview but my application were just be 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 allow my application to return to the video recording surfaceview and still running the background recording using the service rather than giving me an error? Can someone help please...

Code: Select all
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 camera;
   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) {
       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 onResume(){
       super.onResume();
       
    }
   
    @Override
    public void surfaceDestroyed(SurfaceHolder holder){
          camera.stopPreview();
          previewRunning = false;
          camera.release();
    }
}



My RecordingService.java file
Code: Select all
public class ServiceRecording extends Service {

   @Override
   public IBinder onBind(Intent intent) {
      // TODO Auto-generated method stub
      return null;
   }
   
   private SurfaceView surfaceView;
   private SurfaceHolder surfaceHolder;
   private Camera camera;
   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;
       camera = CameraTest.camera;
       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();
       //camera.stopPreview();
       recordingStatus = false;
       //camera.release();
    }   
   
    public boolean startRecording(){
       try {
             Toast.makeText(getBaseContext(), "Recording Started", Toast.LENGTH_SHORT).show();
             try{
                camera.unlock();
             }
             catch(Exception e){
                
                camera.reconnect();   
             }
             
             mediaRecorder = new MediaRecorder();
             
             mediaRecorder.setCamera(camera);
             
             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 {
         camera.reconnect();
      } catch (IOException e) {
         // TODO Auto-generated catch block
         e.printStackTrace();
      }
       recordingStatus = false;
    }
}
imso
Developer
Developer
 
Posts: 49
Joined: Mon Mar 21, 2011 10:47 am

Top

Return to Other Coding-Problems

Who is online

Users browsing this forum: No registered users and 26 guests