Hi there!
I've a problem with the Camera, in particular with the
surfaceDestroyed() callback.
This is my scenario:
The app starts with an activity that shows a splash screen, and after
3 seconds it send an Intent to the MyCameraActivity.
I want to finish the splashscreen activity so in onStop() I call
finish().
The CameraActivity starts but if I push the BACK button (my app
terminate) I see from my log that the surfaceDestroyed() callbacks
isn't called, where I release the camera source. The consequence is
simple... when I start the app again, the camera source doesn't result
free and I have a message error.
Why does it happen this?
Thanks to anyone wants to help me.
*** The Splash Activity ***
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.splash);
splashHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case STOPSPLASH:
startActivity(new
Intent(getApplicationContext(),
CameraView.class));
break;
}
}
};
Message msg = new Message();
msg.what = STOPSPLASH;
splashHandler.sendMessageDelayed(msg, TIME_SPLASH);
}
@Override
public void onPause(){
super.onPause();
Log.d("DEBUG", "Splash onPause");
finish();
}
Here part of the code!
*** MyCameraActivity ***
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d("DEBUG", "onCreate CameraView");
getWindow().setFormat(PixelFormat.TRANSLUCENT); //aggiungo il
traslucido
requestWindowFeature(Window.FEATURE_NO_TITLE); //no barra
titolo
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN); //full screen
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.camera);
mSurfaceView = (SurfaceView)findViewById(R.id.camera_surface);
mSurfaceHolder = mSurfaceView.getHolder(); //recupero l'holder
della surfaceview
mSurfaceHolder.addCallback(this); //faccio la bind alla nostra
activity
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
public void surfaceCreated(SurfaceHolder holder) {
Log.d("DEBUG", "surfaceCreated");
mCamera = Camera.open();
Log.d("DEBUG", "Camera open()");
}
public void surfaceDestroyed(SurfaceHolder holder) {
Log.d("DEBUG", "surfaceDestroyed");
mCamera.stopPreview();
mPreviewRunning = false;
mCamera.release();
mCamera = null;
Log.d("DEBUG", "Camera rilasciata");
}
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2,
int arg3) {
Log.d("DEBUG", "surfaceChanged");
if (mPreviewRunning) {
Log.d("DEBUG", "la preview รจ running ora viene
stoppata.");
mCamera.stopPreview();
mPreviewRunning = false;
}
//setto le preferenze
setPreferencesCamera(arg2, arg3);
try {
//lancio la preview
Log.d("DEBUG", "lancio la preview");
mCamera.setPreviewDisplay(arg0);
mCamera.startPreview();
mPreviewRunning = true;
} catch (IOException e) {
Log.e("ERROR", "SurfaceChanged: errore Camera
setPreviewDisplay");
}
}
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en