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)
Vous devez vous connecter pour publier un commentaire.
De la Les Développeurs Android Docs:
Essayez d'emballer ce code dans un bloc try catch comme suit:
Puis ajoutez cette fonction quelque part:
N'est pas une autorisation sur android 6.x?
http://developer.android.com/training/permissions/requesting.html
Avec Android 6.0, cette erreur peut appened si vous ne cochez pas pour manifester autorisation :
OP mentionne cela dans sa question, mais mon problème est que j'ai oublié d'activer l'appareil photo de l'émulation dans mon AVD paramètres de l'émulateur:
À l'aide de
a fonctionné pour moi
1.Utilisation ci-dessous les permissions dans le fichier de manifeste et de toujours mettre les autorisations au-dessus de l'Application de la balise.
2.L'utilisation de Déverrouillage pendant que l'appareil utilisé par d'autres services comme MediaRecorder.
2.Publié appareil photo correctement, je préfère utiliser la fonction de verrouillage de façon à devenir accessibles de manière sûre pour les autres applications, et à la deuxième temps d'utilisation (Dans le cas où si nous rouvrons).
Si vous régulièrement a obtenu un écran blanc au lieu de la vue de la caméra - utilisation:
et de le mettre ici
et ici