Android FaceDetectionListener

Dagobert

Bekanntes Mitglied
Guten Tag,
Ich hab mir jetzt mal vorgenommen ein bisschen mit Android zu spielen.

Mein Ziel ist es erstmal die Anzahl der Gesichter aus einer Kamera Preview zu bekommen.

Meine Start-Activity sieht so aus:

Java:
package de.muehlensoft;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.hardware.Camera;
import android.hardware.Camera.Face;
import android.hardware.Camera.FaceDetectionListener;
import android.os.Bundle;

public class FaceAppActivity extends Activity implements FaceDetectionListener{

	private FaceFragment infoFragment;
	private CameraFragment cameraFragment;
	
	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		FragmentManager fm = getFragmentManager();
		cameraFragment = new CameraFragment();
		infoFragment = new FaceFragment();	
		
		FragmentTransaction ta = fm.beginTransaction();
		ta.add(R.id.camerafragment, cameraFragment);
		ta.add(R.id.infofragment, infoFragment);
		ta.commit();	

		
//		 cameraFragment.setFaceDetectionListener(this);		<- Fehler, da camera noch null ist
	}

	public void onFaceDetection(Face[] faces, Camera camera) {
		infoFragment.setFaceCount(faces.length);
	}
}

Dann hab ich noch das CameraFragment und eine Camera Preview, die weitestgehend von google kommen:
Java:
package de.muehlensoft;

import android.app.Fragment;
import android.hardware.Camera;
import android.hardware.Camera.CameraInfo;
import android.hardware.Camera.FaceDetectionListener;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class CameraFragment extends Fragment {

	private CameraPreview mPreview;
	Camera mCamera;
	int mNumberOfCameras;
	int mCurrentCamera; // Camera ID currently chosen
	int mCameraCurrentlyLocked; // Camera ID that's actually acquired
	
	// The first rear facing camera
	int mDefaultCameraId;

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

		// Create a container that will hold a SurfaceView for camera previews
		mPreview = new CameraPreview(this.getActivity());
		
		// Find the total number of cameras available
		mNumberOfCameras = Camera.getNumberOfCameras();

		// Find the ID of the rear-facing ("default") camera
		CameraInfo cameraInfo = new CameraInfo();
		for (int i = 0; i < mNumberOfCameras; i++) {
			Camera.getCameraInfo(i, cameraInfo);
			if (cameraInfo.facing == CameraInfo.CAMERA_FACING_BACK) {
				mCurrentCamera = mDefaultCameraId = i;
			}
		}
		setHasOptionsMenu(mNumberOfCameras > 1);
	}

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		return mPreview;
	}

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

		// Use mCurrentCamera to select the camera desired to safely restore
		// the fragment after the camera has been changed
		mCamera = Camera.open(mCurrentCamera);
		mCameraCurrentlyLocked = mCurrentCamera;
		mPreview.setCamera(mCamera);
	}

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

		// Because the Camera object is a shared resource, it's very
		// important to release it when the activity is paused.
		if (mCamera != null) {
			mPreview.setCamera(null);
			mCamera.release();
			mCamera = null;
		}
	}
	
	public void setFaceDetectionListener(FaceDetectionListener l){
		mPreview.setFaceDetectionListener(l);
	}
}

Java:
package de.muehlensoft;

import java.io.IOException;
import java.util.List;

import android.content.Context;
import android.hardware.Camera;
import android.hardware.Camera.FaceDetectionListener;
import android.hardware.Camera.Size;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

	/**
	 * A simple wrapper around a Camera and a SurfaceView that renders a centered
	 * preview of the Camera to the surface. We need to center the SurfaceView
	 * because not all devices have cameras that support preview sizes at the same
	 * aspect ratio as the device's display.
	 */
	public class CameraPreview extends SurfaceView  implements SurfaceHolder.Callback {
		private final String TAG = "Preview";

		SurfaceHolder mHolder;
		Size mPreviewSize;
		List<Size> mSupportedPreviewSizes;
		Camera mCamera;
		boolean mSurfaceCreated = false;
		
		private FaceDetectionListener mFaceListener;

		CameraPreview(Context context) {
			super(context);

			// Install a SurfaceHolder.Callback so we get notified when the
			// underlying surface is created and destroyed.
			mHolder = getHolder();
			mHolder.addCallback(this);
			mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
		}

		public void setCamera(Camera camera) {
			mCamera = camera;
			if (mCamera != null) {
				mSupportedPreviewSizes = mCamera.getParameters()
						.getSupportedPreviewSizes();
				if (mSurfaceCreated)
					requestLayout();
			}
		}

		public void switchCamera(Camera camera) {
			setCamera(camera);
			try {
				camera.setPreviewDisplay(mHolder);
			} catch (IOException exception) {
				Log.e(TAG, "IOException caused by setPreviewDisplay()", exception);
			}
		}

		@Override
		protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
			// We purposely disregard child measurements because act as a
			// wrapper to a SurfaceView that centers the camera preview instead
			// of stretching it.
			final int width = resolveSize(getSuggestedMinimumWidth(),
					widthMeasureSpec);
			final int height = resolveSize(getSuggestedMinimumHeight(),
					heightMeasureSpec);
			setMeasuredDimension(width, height);

			if (mSupportedPreviewSizes != null) {
				mPreviewSize = getOptimalPreviewSize(mSupportedPreviewSizes, width,
						height);
			}

			if (mCamera != null) {
				Camera.Parameters parameters = mCamera.getParameters();
				parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height);

				mCamera.setParameters(parameters);
			}
		}

		public void surfaceCreated(SurfaceHolder holder) {
			// The Surface has been created, acquire the camera and tell it where
			// to draw.
			try {
				if (mCamera != null) {
					mCamera.setPreviewDisplay(holder);
					if(mFaceListener != null)
						mCamera.setFaceDetectionListener(mFaceListener);
				}
			} catch (IOException exception) {
				Log.e(TAG, "IOException caused by setPreviewDisplay()", exception);
			}
			if (mPreviewSize == null)
				requestLayout();
			mSurfaceCreated = true;
		}

		public void surfaceDestroyed(SurfaceHolder holder) {
			// Surface will be destroyed when we return, so stop the preview.
			if (mCamera != null) {
				mCamera.stopPreview();
			}
		}

		private Size getOptimalPreviewSize(List<Size> sizes, int w, int h) {
			final double ASPECT_TOLERANCE = 0.1;
			double targetRatio = (double) w / h;
			if (sizes == null)
				return null;

			Size optimalSize = null;
			double minDiff = Double.MAX_VALUE;

			int targetHeight = h;

			// Try to find an size match aspect ratio and size
			for (Size size : sizes) {
				double ratio = (double) size.width / size.height;
				if (Math.abs(ratio - targetRatio) > ASPECT_TOLERANCE)
					continue;
				if (Math.abs(size.height - targetHeight) < minDiff) {
					optimalSize = size;
					minDiff = Math.abs(size.height - targetHeight);
				}
			}

			// Cannot find the one match the aspect ratio, ignore the requirement
			if (optimalSize == null) {
				minDiff = Double.MAX_VALUE;
				for (Size size : sizes) {
					if (Math.abs(size.height - targetHeight) < minDiff) {
						optimalSize = size;
						minDiff = Math.abs(size.height - targetHeight);
					}
				}
			}
			return optimalSize;
		}

		public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
			// Now that the size is known, set up the camera parameters and begin
			// the preview.
			Camera.Parameters parameters = mCamera.getParameters();
			parameters.setPreviewSize(mPreviewSize.width, mPreviewSize.height);
			requestLayout();

			mCamera.setParameters(parameters);
			mCamera.startPreview();
			if(mFaceListener != null)
				mCamera.setFaceDetectionListener(mFaceListener);
		}
		
		public void setFaceDetectionListener(FaceDetectionListener l){
			mFaceListener = l;
			if(mCamera != null){
				mCamera.setFaceDetectionListener(mFaceListener);
			}
		}
}

Jetzt ist meine Frage, wann (und wo überall) muss ich den FaceDetectionListener regestrieren?
Desweiteren hab ich das Problem, das die App das OnResum() nicht überlebt, also beim zurückkehren aus dem Hintergrund stürzt sie ab. Was ist da noch falsch?

mfg. Dagobert
 
Zuletzt bearbeitet von einem Moderator:

schlingel

Gesperrter Benutzer
Eins nach dem anderen.

1. Wie sieht die Exception aus? Logcat!
2. Warum verwendest du Fragments? Würde es zum "Spielen" nicht auch erst mal eine normale Activity tun?
3. FaceDetectionListener musst du natürlich nur bei dem Camera-Objekt registrieren.
4. Wo kommt das mCamera-Objekt beim onResume her? Meine Vermutung: Zu dem Zeitpunkt ist es null und du musst es dir noch einmal holen, also hier auch wieder den Listener registrieren.
 

Dagobert

Bekanntes Mitglied
Okay machen wir es langsamer :D
1. Wie sieht die Exception aus? Logcat!
Auszug wenn ich die App in den Hintergrund schiebe, und wieder öffne:
Code:
06-06 15:59:20.140: E/AndroidRuntime(2196): FATAL EXCEPTION: main
06-06 15:59:20.140: E/AndroidRuntime(2196): java.lang.RuntimeException: Unable to resume activity {de.muehlensoft/de.muehlensoft.FaceAppActivity}: java.lang.RuntimeException: Fail to connect to camera service
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2820)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2859)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2242)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3806)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at android.app.ActivityThread.access$700(ActivityThread.java:139)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1266)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at android.os.Handler.dispatchMessage(Handler.java:99)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at android.os.Looper.loop(Looper.java:156)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at android.app.ActivityThread.main(ActivityThread.java:5005)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at java.lang.reflect.Method.invokeNative(Native Method)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at java.lang.reflect.Method.invoke(Method.java:511)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at dalvik.system.NativeStart.main(Native Method)
06-06 15:59:20.140: E/AndroidRuntime(2196): Caused by: java.lang.RuntimeException: Fail to connect to camera service
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at android.hardware.Camera.native_setup(Native Method)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at android.hardware.Camera.<init>(Camera.java:325)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at android.hardware.Camera.open(Camera.java:284)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at de.muehlensoft.CameraFragment.onResume(CameraFragment.java:74)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:875)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1034)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1016)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at android.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:1778)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at android.app.Activity.performResume(Activity.java:4635)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2804)
06-06 15:59:20.140: E/AndroidRuntime(2196): 	... 13 more
Hier der Listener-Fehler:
Code:
06-06 16:02:56.240: E/AndroidRuntime(3186): java.lang.RuntimeException: Unable to start activity ComponentInfo{de.muehlensoft/de.muehlensoft.FaceAppActivity}: java.lang.NullPointerException
06-06 16:02:56.240: E/AndroidRuntime(3186): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2202)
06-06 16:02:56.240: E/AndroidRuntime(3186): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2237)
06-06 16:02:56.240: E/AndroidRuntime(3186): 	at android.app.ActivityThread.access$600(ActivityThread.java:139)
06-06 16:02:56.240: E/AndroidRuntime(3186): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1262)
06-06 16:02:56.240: E/AndroidRuntime(3186): 	at android.os.Handler.dispatchMessage(Handler.java:99)
06-06 16:02:56.240: E/AndroidRuntime(3186): 	at android.os.Looper.loop(Looper.java:156)
06-06 16:02:56.240: E/AndroidRuntime(3186): 	at android.app.ActivityThread.main(ActivityThread.java:5005)
06-06 16:02:56.240: E/AndroidRuntime(3186): 	at java.lang.reflect.Method.invokeNative(Native Method)
06-06 16:02:56.240: E/AndroidRuntime(3186): 	at java.lang.reflect.Method.invoke(Method.java:511)
06-06 16:02:56.240: E/AndroidRuntime(3186): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-06 16:02:56.240: E/AndroidRuntime(3186): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-06 16:02:56.240: E/AndroidRuntime(3186): 	at dalvik.system.NativeStart.main(Native Method)
06-06 16:02:56.240: E/AndroidRuntime(3186): Caused by: java.lang.NullPointerException
06-06 16:02:56.240: E/AndroidRuntime(3186): 	at de.muehlensoft.CameraFragment.setFaceDetectionListener(CameraFragment.java:137)
06-06 16:02:56.240: E/AndroidRuntime(3186): 	at de.muehlensoft.FaceAppActivity.onCreate(FaceAppActivity.java:68)
06-06 16:02:56.240: E/AndroidRuntime(3186): 	at android.app.Activity.performCreate(Activity.java:4543)
06-06 16:02:56.240: E/AndroidRuntime(3186): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1071)
06-06 16:02:56.240: E/AndroidRuntime(3186): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2158)
06-06 16:02:56.240: E/AndroidRuntime(3186): 	... 11 more
Wie gesagt, die Camera ist beim Listener-Adden noch null... in welche Zyklusphase muss ich das tun?

2. Warum verwendest du Fragments? Würde es zum "Spielen" nicht auch erst mal eine normale Activity tun?
Weil ich nur ICS unterstütze, hier ein Handy und ein Tab liegen habe, und ich google entnommen habe, das dies Stand der Technik ist. Ist es ratsam sich erst "richtig" in Activities einzuleben? Im Buch/Video wird auch schnell in Fragmente eingeführt....
3. FaceDetectionListener musst du natürlich nur bei dem Camera-Objekt registrieren.
Ja, aber ich muss ja erst einmal zur Kamera kommen ;) Gibt es einen schöneren Weg? =)
4. Wo kommt das mCamera-Objekt beim onResume her? Meine Vermutung: Zu dem Zeitpunkt ist es null und du musst es dir noch einmal holen, also hier auch wieder den Listener registrieren.
Das kann ich dir noch nicht genau sagen woher die Camera kommt :D

soooo jetzt erstmal Danke das du mir versuchst zu Helfen =)

mfg. Dagobert
 

schlingel

Gesperrter Benutzer
Punkto Fragments: Entweder man arbeitet mit Fragments und versucht diese zu behirnen oder man wendet sich einer anderen Technologie zu. Beim Lernen ist es sehr blockierend wenn man sich mit mehr als einer unbekannten Technologie befasst. Man glaubt da addiert sich der Aufwand, aber der multipliziert sich meistens.

Zudem sich IMHO der Aufwand sowieso nur lohnt wenn man etwas damit machen möchte. Also z.B. wenn man eine ActionBar braucht oder für Tablets gleich mit entwickelt. Ansonsten spar ich mir das.

Punkto Kamera: open() schon probiert? Laut Doku öffnet diese die erste verfügbare Kamera die sich am Rücken des Geräts befindet. also eh das was du möchtest.

Punkto Exception: Jepp, keine Kamera da, also gibt's ne NPE. Probier das mit open aus.
 

Dagobert

Bekanntes Mitglied
Beim Lernen ist es sehr blockierend wenn man sich mit mehr als einer unbekannten Technologie befasst. Man glaubt da addiert sich der Aufwand, aber der multipliziert sich meistens.
Das bin ich seit dem Studium leider gewöhnt ^^
Zudem sich IMHO der Aufwand sowieso nur lohnt wenn man etwas damit machen möchte. Also z.B. wenn man eine ActionBar braucht oder für Tablets gleich mit entwickelt. Ansonsten spar ich mir das
ActionBar ist drin, ich würde mich gerne an die Google Richtlinien halten, alleine um die 3 Punkte zu vermeiden :D
Punkto Kamera: open() schon probiert? Laut Doku öffnet diese die erste verfügbare Kamera die sich am Rücken des Geräts befindet. also eh das was du möchtest.
Meinst du so mit open?
[JAVA=67]@Override
public void onResume() {
super.onResume();

// Use mCurrentCamera to select the camera desired to safely restore
// the fragment after the camera has been changed
mCamera = Camera.open();
mCameraCurrentlyLocked = mCurrentCamera;
Log.d("CAMERA", mCamera.toString());
// mPreview.setCamera(mCamera);
}[/code]
So, das Log sagt mir das ich immer eine Camera bekommen, also muss es ja jetzt an der Preview-Surface liegen....
Aber was möchte mir der Log mit dem Camera-Fehler sagen?
06-06 16:37:36.450: D/CAMERA(14110): android.hardware.Camera@40d79718
06-06 16:37:36.490: E/CAMERA RAWCHIP_PROC(735): [Flash Calibration] : partition_open ["WDM"] failed, errno = 13 (Permission denied)! Use original cfg value.
06-06 16:37:37.440: E/CAMERA RAWCHIP_PROC(735): rawchip_thread_release
06-06 16:37:37.750: D/CAMERA(14110): android.hardware.Camera@40db3f98
06-06 16:37:39.500: E/CAMERA RAWCHIP_PROC(735): [Flash Calibration] : partition_open ["WDM"] failed, errno = 13 (Permission denied)! Use original cfg value.
06-06 16:37:39.920: E/CAMERA RAWCHIP_PROC(735): rawchip_thread_release
06-06 16:37:44.130: D/CAMERA(14388): android.hardware.Camera@40d7b040
06-06 16:37:44.160: E/CAMERA RAWCHIP_PROC(735): [Flash Calibration] : partition_open ["WDM"] failed, errno = 13 (Permission denied)! Use original cfg value.
06-06 16:38:12.790: E/CAMERA RAWCHIP_PROC(735): rawchip_thread_release
06-06 16:38:28.470: D/CAMERA(14388): android.hardware.Camera@40db1310
06-06 16:38:28.470: E/CAMERA RAWCHIP_PROC(735): [Flash Calibration] : partition_open ["WDM"] failed, errno = 13 (Permission denied)! Use original cfg value.
06-06 16:38:31.610: E/CAMERA RAWCHIP_PROC(735): rawchip_thread_release
06-06 16:38:32.520: D/CAMERA(14388): android.hardware.Camera@40de2ff8
06-06 16:38:34.690: E/CAMERA RAWCHIP_PROC(735): [Flash Calibration] : partition_open ["WDM"] failed, errno = 13 (Permission denied)! Use original cfg value.
06-06 16:38:35.300: E/CAMERA RAWCHIP_PROC(735): rawchip_thread_release

Okay dieser Fehler scheint mit dem Camera-Chip des OneX zusammen zu hängen, denn am Tab ist der Camera log sauber....
 

schlingel

Gesperrter Benutzer
Das bin ich seit dem Studium leider gewöhnt ^^
Also ich hab aus dem Studium mit genommen alles Schritt für Schritt, schön organisiert an zu gehen da mich sonst die Komplexität erschlägt. Außerdem lerne ich so viel schneller, weil der Aufwand dann nur die Summe der Aufgaben und nicht deren Produkt ist ;-)

Aber jeder wie er glaubt.

Punkto Exceptions: Schau noch mal ob du für die Kamera alle nötigen Berechtigungen gesetzt hast. Vielleicht spuckt Google für dein Gerät zusätzlich notwendige aus.
 
Zuletzt bearbeitet:

Dagobert

Bekanntes Mitglied
Ich glaube ich bin schon mal ein Stück weiter ;)
Also wenn ich den das Display aus mache, bleibt die Camera hängen, wenn ich nun nach dem anschalten dann wieder minimiere und wieder öffne geht es weiter....

mfg. Dagobert
 

schlingel

Gesperrter Benutzer
Hm, hört sich an als wäre das Problem das Camera-Objekt das weiterhin auf die SurfaceView zeichnen möchte die's nimmer gibt.

Check einmal ob es das ist.
 

Dagobert

Bekanntes Mitglied
Soweit ich sehe ist das nicht der Fall, ich habe ehr das Gefühl das die Preview nicht schnell genug wieder anfängt zu zeichen....
 

Dagobert

Bekanntes Mitglied
So ich habe nochmal gaaanz weit unten angefangen:
Java:
package de.muehlensoft;

import android.app.Fragment;
import android.hardware.Camera;
import android.hardware.Camera.FaceDetectionListener;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class CameraFragment extends Fragment {

	// private CameraPreview mPreview;
	private Camera mCamera;

	private FaceDetectionListener fdl;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		mCamera = Camera.open();
		Log.d("CAMERA", mCamera.toString());
		mCamera.release();
		mCamera = null;
		Log.d("CAMERA", String.valueOf(mCamera));
	}

	@Override
	public void onPause() {
		super.onPause();
		if(mCamera != null){
			mCamera.release();
			mCamera = null;
		}
		Log.d("CAMERA", "Pause");
	}
	
	@Override
	public void onResume() {
		super.onResume();
		mCamera = Camera.open();
		Log.d("CAMERA", "Weiter");
	}
	
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		Log.d("CAMERA", "crate view");
		return inflater.inflate(R.layout.main, container, false);
	}

}

Warum cresht das denn schon? oO

Code:
06-07 02:04:01.330: E/AndroidRuntime(19502): FATAL EXCEPTION: main
06-07 02:04:01.330: E/AndroidRuntime(19502): java.lang.RuntimeException: Unable to resume activity {de.muehlensoft/de.muehlensoft.FaceAppActivity}: java.lang.RuntimeException: Fail to connect to camera service
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2444)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2472)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1986)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3351)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at android.app.ActivityThread.access$700(ActivityThread.java:123)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1151)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at android.os.Handler.dispatchMessage(Handler.java:99)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at android.os.Looper.loop(Looper.java:137)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at android.app.ActivityThread.main(ActivityThread.java:4424)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at java.lang.reflect.Method.invokeNative(Native Method)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at java.lang.reflect.Method.invoke(Method.java:511)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at dalvik.system.NativeStart.main(Native Method)
06-07 02:04:01.330: E/AndroidRuntime(19502): Caused by: java.lang.RuntimeException: Fail to connect to camera service
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at android.hardware.Camera.native_setup(Native Method)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at android.hardware.Camera.<init>(Camera.java:304)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at android.hardware.Camera.open(Camera.java:279)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at de.muehlensoft.CameraFragment.onResume(CameraFragment.java:43)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:873)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1032)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1014)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at android.app.FragmentManagerImpl.dispatchResume(FragmentManager.java:1776)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at android.app.Activity.performResume(Activity.java:4549)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2434)
06-07 02:04:01.330: E/AndroidRuntime(19502): 	... 13 more

Dann hab ich noch die Frage, warum sich das Fragment gefühlte 20 mal nach einander aufbauen möchte?
Code:
06-07 02:23:50.300: D/CAMERA(632): crate view
06-07 02:23:50.300: D/CAMERA(632): crate view
06-07 02:23:50.300: D/CAMERA(632): crate view
06-07 02:23:50.300: D/CAMERA(632): crate view
06-07 02:23:50.300: D/CAMERA(632): crate view
06-07 02:23:50.300: D/CAMERA(632): crate view
06-07 02:23:50.300: D/CAMERA(632): crate view
06-07 02:23:50.300: D/CAMERA(632): crate view
06-07 02:23:50.300: D/CAMERA(632): crate view
06-07 02:23:50.300: D/CAMERA(632): crate view
06-07 02:23:50.300: D/CAMERA(632): crate view
06-07 02:23:50.300: D/CAMERA(632): crate view
06-07 02:23:50.300: D/CAMERA(632): crate view
06-07 02:23:50.300: D/CAMERA(632): crate view
06-07 02:23:50.300: D/CAMERA(632): crate view
06-07 02:23:50.300: D/CAMERA(632): crate view
06-07 02:23:50.300: D/CAMERA(632): crate view
06-07 02:23:50.300: D/CAMERA(632): crate view
06-07 02:23:50.300: D/CAMERA(632): crate view
06-07 02:23:50.310: D/CAMERA(632): Weiter
06-07 02:23:50.310: D/CAMERA(632): Weiter
06-07 02:23:50.310: D/CAMERA(632): Weiter
06-07 02:23:50.310: D/CAMERA(632): Weiter
06-07 02:23:50.310: D/CAMERA(632): Weiter
06-07 02:23:50.310: D/CAMERA(632): Weiter
06-07 02:23:50.310: D/CAMERA(632): Weiter
06-07 02:23:50.310: D/CAMERA(632): Weiter
06-07 02:23:50.310: D/CAMERA(632): Weiter
06-07 02:23:50.310: D/CAMERA(632): Weiter
06-07 02:23:50.310: D/CAMERA(632): Weiter
06-07 02:23:50.310: D/CAMERA(632): Weiter
06-07 02:23:50.310: D/CAMERA(632): Weiter
06-07 02:23:50.310: D/CAMERA(632): Weiter
06-07 02:23:50.310: D/CAMERA(632): Weiter
06-07 02:23:50.310: D/CAMERA(632): Weiter
06-07 02:23:50.310: D/CAMERA(632): Weiter
06-07 02:23:50.310: D/CAMERA(632): Weiter
06-07 02:23:50.310: D/CAMERA(632): Weiter
06-07 02:23:53.984: D/CAMERA(632): Pause
06-07 02:23:53.984: D/CAMERA(632): Pause
06-07 02:23:53.984: D/CAMERA(632): Pause
06-07 02:23:53.984: D/CAMERA(632): Pause
06-07 02:23:53.984: D/CAMERA(632): Pause
06-07 02:23:53.984: D/CAMERA(632): Pause
06-07 02:23:53.984: D/CAMERA(632): Pause
06-07 02:23:53.984: D/CAMERA(632): Pause
06-07 02:23:53.984: D/CAMERA(632): Pause
06-07 02:23:53.984: D/CAMERA(632): Pause
06-07 02:23:53.984: D/CAMERA(632): Pause
06-07 02:23:53.984: D/CAMERA(632): Pause
06-07 02:23:53.984: D/CAMERA(632): Pause
06-07 02:23:53.984: D/CAMERA(632): Pause
06-07 02:23:53.984: D/CAMERA(632): Pause
06-07 02:23:53.984: D/CAMERA(632): Pause
06-07 02:23:53.984: D/CAMERA(632): Pause
06-07 02:23:53.984: D/CAMERA(632): Pause
06-07 02:23:53.984: D/CAMERA(632): Pause

mfg. Dagobert
 
Zuletzt bearbeitet:

schlingel

Gesperrter Benutzer
Vermutlich weil der Service nicht schnell genug reagiert, was wiederum mit den dauernden Aufrufen zu tun haben könnte.

Die Frage warum das so oft passiert, kann ich dir leider nicht beantworten.
 

Dagobert

Bekanntes Mitglied
Also ich habe es nochmal von vorne gemacht :D
Das die Methoden so oft aufgerufen wurden, lag an meinem Verständnis, welches jetzt besser ist :D
Auch die Camera Preview läuft soweit bis auf 2 aber's die mich stören, aber erst einmal temporär verkraftbar sind. Darum kümmer ich mich dann später ;) wenn ich ein bisschen mehr Erfahrung und ein Händchen dafür bekommen habe ;)

Danke für deine Bemühungen erstmal so weit ;)

mfg. Dagobert
 

Dagobert

Bekanntes Mitglied
So jetzt hab ich ein bisschen gefrickelt, und es läuft auch mehr oder weniger.....
Jetzt hab ich das Problem, das ich ja bei einem Camera.Face immer die ID -1, egal bei welchem Gesicht, zurückbekomme oO.

Ist das nicht ordentlich implementiert, oder warum bekomme ich immer eine -1 ?

PS: okay die Antwort steht weiter hinten, es wurde wahrscheinlich nicht von HTC implementiert oO

mfg. Dagobert
 

Neue Themen


Oben