Comment réparer “ne parviennent pas à se connecter à la caméra de service” exception dans l'émulateur Android

Que je suis un ne parviennent pas à se connecter à la caméra exception de service quand je lance mon application Android dans l'émulateur. J'ai lu les différents postes existants, mais aucun n'a résolu ce. C'est clairement la Caméra.open() qui est un échec. Je voudrais par la suite comme pour obtenir la webcam va dans l'émulateur, comme de nombreux postes de discuter, mais juste que l'application doit s'exécuter sans les bombardements. Je ne m'inquiète pas de savoir si n'importe quelle caméra vidéo est affichée ou pas, car il ya d'autres fonctions en plus de l'appareil photo que j'ai besoin de tester, et principalement de tester l'appareil photo sur mon appareil, de toute façon.

Mon manifeste semble être ok. Les lignes suivantes sont en elle:

<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.CAMERA"></uses-permission>

Dans mon AVD manager, j'ai mis à la fois l'avant et l'arrière de l'appareil photo "Émulé" et la valeur de la Carte SD de 64. Telles semblent être les valeurs recommandées. Le plein de trace de pile est maintenant ci-dessous. La Solution doit être quelque chose de simple, mais quoi?

10-09 08:14:32.375    2628-2628/com.allinlearning.AILAndroidScanner E/AndroidRuntime FATAL EXCEPTION: main
Process: com.allinlearning.AILAndroidScanner, PID: 2628
java.lang.RuntimeException: Fail to connect to camera service
at android.hardware.Camera.native_setup(Native Method)
at android.hardware.Camera.<init>(Camera.java:350)
at android.hardware.Camera.open(Camera.java:309)
at com.allinlearning.AILAndroidScanner.AsynCamPreview.surfaceCreated(AsynCamPreview.java:104)
at android.view.SurfaceView.updateWindow(SurfaceView.java:572)
at android.view.SurfaceView.access$000(SurfaceView.java:86)
at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:175)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:847)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1871)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1000)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5670)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:544)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5017)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
at dalvik.system.NativeStart.main(Native Method)

Le code pour l'ensemble de la classe est ci-dessous. Encore une fois, c'est la Caméra.open() l'appel que lance l'exception:

import java.io.IOException;
import java.util.List;
import android.graphics.Bitmap;
import android.graphics.ImageFormat;
import android.hardware.Camera;
import android.os.AsyncTask;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.view.SurfaceHolder;
import android.webkit.MimeTypeMap;
import android.widget.ImageView;
public class AsynCamPreview extends MainActivity
implements SurfaceHolder.Callback,  Camera.PreviewCallback
{
private Camera mCamera;
public Camera.Parameters params;
private SurfaceHolder sHolder;
private ImageView myCameraPreview = null;
private Bitmap mBitmap = null;
//data arrays
private int[] pixels = null;
private float[] floatpixels = null;
private byte[] FrameData = null;
//Camera params
public float maxZoom;
private int imageFormat;
private int previewSizeWidth;
private int previewSizeHeight;
private int camId = 1;
//flags and counts
private boolean bProcessing = false;
private int frameCount = 0;
private boolean doProcessing = false;
public boolean mProcessInProgress = false;
public static final String TAG = "AsynCamPreview";
private long mTiming[] = new long[50];
private int mTimingSlot = 0;
Handler mHandler = new Handler(Looper.getMainLooper());
static {
//     System.loadLibrary("ImageProcessing");
Log.i(TAG, "Native library loaded");
}
public AsynCamPreview(int previewLayoutWidth, int previewLayoutHeight, ImageView cameraPreview)
{
previewSizeWidth = previewLayoutWidth;
previewSizeHeight = previewLayoutHeight;
myCameraPreview =cameraPreview;
}
@Override
public void onPreviewFrame(byte[] data, Camera camera)
{
//Do nothing for now
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
//TODO Auto-generated method stub
sHolder = holder;
if (camId == 0) {
mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
}
else {
mCamera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);
}
try {
mCamera.setPreviewDisplay(holder);
mCamera.setPreviewCallback(this);
} catch (IOException e) {
mCamera.release();
mCamera= null;
}
params = mCamera.getParameters();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
//TODO Auto-generated method stub
params = mCamera.getParameters();
List<Camera.Size> sizes = params.getSupportedPictureSizes();
this.params.setPreviewSize(previewSizeWidth, previewSizeHeight);
mBitmap = Bitmap.createBitmap(previewSizeWidth, previewSizeHeight,
Bitmap.Config.ARGB_8888);
myCameraPreview.setImageBitmap(mBitmap);
pixels = new int[previewSizeWidth * previewSizeHeight];
//floatpixels = new float[previewSizeWidth * previewSizeHeight * 3];
imageFormat = params.getPreviewFormat();
mCamera.setParameters(params);
mCamera.startPreview();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
//TODO Auto-generated method stub
mCamera.setPreviewCallback(null);
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
@Override
public void onPause() {
this.mCamera.stopPreview();
}
}
  • Pourriez-vous poster le code Java s'il vous plaît? Et également l'ensemble de la trace de la pile?
  • Tyler, j'ai mis à jour la question selon votre demande.
  • Merci, même si nous aurez probablement besoin de plus de code Java. Vous pouvez poster l'ensemble de la classe? Je devine que c'est la déclaration de mCamera ce n'est pas fait correctement.
  • Ne semble pas comme beaucoup est fait une fois la Caméra var est mis en plus d'essayer de l'ouvrir. Mais ce code a bien fonctionné dans mon projet Eclipse pour un appareil (je suis maintenant à l'Ide sur l'émulateur)
InformationsquelleAutor Alyoshak | 2014-10-10