B
Bastczuak
Neues Mitglied
- 0
Hallo Leute 
Ich sitze gerade an einer App, die die Funktion der Live-View per Kamera verwendet (ist jetzt nicht direkt eine Kamera App). Hierfür habe ich mich an den offiziellen Developer Guide von Google orientiert (bzw. genauso abgeschrieben
)
siehe hier Camera | Android Developers
Zu meinem Problem:
Soweit so Gut...die Live-View oder Camera-Preview, wie man es nennen will, funktioniert top. So doch jetzt habe ich das Problem, wenn ich die App in der Activity, in der die CamerPreview angezeigt wird, durch den Home Button schließe und anschließend wieder öffne, dann abstürzt.
Als Fehler erhalte ich immer "Fatal Exception: MAIN Method called after released()". Natürlich habe ich beachtet die Kamera beim Schließen der App freizugeben (in Methode onPause - camera.release()). Ich kann parallel zu der App meine Standard Kamera-App ohne Probleme öffnen. Das sagt mir die Methode onPause funktioniert. So nun habe ich weiterhin bei Google gelesen, dass mit onResume die App fortgeführt werden kann. So und da hackt es bei mir. Ich habe alles schon probiert unter anderem die Camera wieder mit Camera.open() zu starten. Aber alles klappt nicht.
Ich hoffe Ihr könnt mir helfen und sagen was in die Methode onResume in meinem Fall abgehandelt werden muss, damit die App bei raus-rein Swtichen nicht abkackt
MFG Basti
Ich sitze gerade an einer App, die die Funktion der Live-View per Kamera verwendet (ist jetzt nicht direkt eine Kamera App). Hierfür habe ich mich an den offiziellen Developer Guide von Google orientiert (bzw. genauso abgeschrieben
siehe hier Camera | Android Developers
Zu meinem Problem:
Soweit so Gut...die Live-View oder Camera-Preview, wie man es nennen will, funktioniert top. So doch jetzt habe ich das Problem, wenn ich die App in der Activity, in der die CamerPreview angezeigt wird, durch den Home Button schließe und anschließend wieder öffne, dann abstürzt.
Als Fehler erhalte ich immer "Fatal Exception: MAIN Method called after released()". Natürlich habe ich beachtet die Kamera beim Schließen der App freizugeben (in Methode onPause - camera.release()). Ich kann parallel zu der App meine Standard Kamera-App ohne Probleme öffnen. Das sagt mir die Methode onPause funktioniert. So nun habe ich weiterhin bei Google gelesen, dass mit onResume die App fortgeführt werden kann. So und da hackt es bei mir. Ich habe alles schon probiert unter anderem die Camera wieder mit Camera.open() zu starten. Aber alles klappt nicht.
Ich hoffe Ihr könnt mir helfen und sagen was in die Methode onResume in meinem Fall abgehandelt werden muss, damit die App bei raus-rein Swtichen nicht abkackt
MFG Basti
Code:
package com.example.cameraview;
import java.io.IOException;
import android.content.Context;
import android.hardware.Camera;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
private Camera mCamera;
private SurfaceHolder mHolder;
public CameraPreview(Context context, Camera camera) {
super(context);
mCamera = camera;
// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
mHolder = getHolder();
mHolder.addCallback(this);
}
public void surfaceCreated(SurfaceHolder holder) {
// The Surface has been created, now tell the camera where to draw the preview.
try {
mCamera.setPreviewDisplay(holder);
mCamera.startPreview();
} catch (IOException e) {
}
}
public void surfaceDestroyed(SurfaceHolder holder) {
// empty. Take care of releasing the Camera preview in your activity.
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// If your preview can change or rotate, take care of those events here.
// Make sure to stop the preview before resizing or reformatting it.
if (mHolder.getSurface() == null){
// preview surface does not exist
return;
}
// stop preview before making changes
try {
mCamera.stopPreview();
} catch (Exception e){
// ignore: tried to stop a non-existent preview
}
// set preview size and make any resize, rotate or
// reformatting changes here
// start preview with new settings
try {
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
} catch (Exception e){
}
}
}
Code:
package com.example.cameraview;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
public class CameraActivity extends Activity {
private Camera mCamera;
private CameraPreview mPreview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_camera);
// Create an instance of Camera
mCamera = getCameraInstance();
// Create our Preview view and set it as the content of our activity.
mPreview = new CameraPreview(this, mCamera);
FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
preview.addView(mPreview);
}
/** A safe way to get an instance of the Camera object. */
public static Camera getCameraInstance() {
Camera c = null;
try {
c = Camera.open(); // attempt to get a Camera instance
}
catch (Exception e){
// Camera is not available (in use or does not exist)
}
return c; // returns null if camera is unavailable
}
@Override
protected void onPause() {
super.onPause();
releaseCamera();
}
@Override
protected void onResume() {
super.onResume();
///Was muss hier passieren?
}
private void releaseCamera(){
if (mCamera != null) {
mCamera.release(); // release the camera for other applications
mCamera = null;
}
}
}
Zuletzt bearbeitet: