Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓无法连接到摄像头服务_Android - Fatal编程技术网

Android 安卓无法连接到摄像头服务

Android 安卓无法连接到摄像头服务,android,Android,我需要帮助。我试图使用surface vie实现自定义摄影机,但我遇到了以下错误: Process: visionary.anselmo.camerademo, PID: 7464 java.lang.RuntimeException: Fail to connect to camera service

我需要帮助。我试图使用surface vie实现自定义摄影机,但我遇到了以下错误:

Process: visionary.anselmo.camerademo, PID: 7464
                                                                             java.lang.RuntimeException: Fail to connect to camera service
                                                                            at android.hardware.Camera.<init>(Camera.java:496)
                                                                            at android.hardware.Camera.open(Camera.java:360)
                                                                            at visionary.anselmo.camerademo.CameraActivity.surfaceCreated(CameraActivity.java:149)
                                                                            at android.view.SurfaceView.updateWindow(SurfaceView.java:608)
                                                                            at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:160)
                                                                            at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
                                                                            at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2201)
                                                                            at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1246)
                                                                            at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6301)
                                                                            at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871)
                                                                            at android.view.Choreographer.doCallbacks(Choreographer.java:683)
                                                                            at android.view.Choreographer.doFrame(Choreographer.java:619)
                                                                            at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:857)
                                                                            at android.os.Handler.handleCallback(Handler.java:751)
                                                                            at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                            at android.os.Looper.loop(Looper.java:154)
                                                                            at android.app.ActivityThread.main(ActivityThread.java:6077)
                                                                            at java.lang.reflect.Method.invoke(Native Method)
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
}

帮帮伙计们。。。
谢谢…

您可能需要在运行时请求权限。有关此主题的更多信息,请参阅。
当以Android 6.0或更高版本为目标时,需要请求运行时权限。

通常,这意味着另一个应用程序正在使用摄像头。如果您的应用程序打开相机但未能正确关闭,则可能发生这种情况。尝试重新启动您的设备,看看问题是否解决。@commonware…我正在使用android studio emulator,我关闭了设备并重新启动,但应用程序仍然崩溃…有什么办法可以解决这个问题吗?您的emulator有摄像头吗?你是不是先获得了拍照许可?@JonasKöritz。。。是的,模拟器有摄像头,是的,我确实在清单中请求了摄像头的权限。。。
@SuppressWarnings("deprecation")
private Camera camera;
@InjectView(R.id.surface_view)
SurfaceView surfaceView;
@InjectView(R.id.btn_take_picture)
ImageView take_picture;
SurfaceHolder surfaceHolder;
@SuppressWarnings("deprecation")
Camera.PictureCallback pictureCallback;
@SuppressWarnings("deprecation")
ShutterCallback shutterCallback;


@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.camera_activity);
    ButterKnife.inject(this);
    surfaceHolder = surfaceView.getHolder();
    // Install the surfaceHolder.Callback so we get notified when the underlying is created and destroyed
    surfaceHolder.addCallback(this);
    surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    take_picture.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            cameraImage();
        }
    });
    pictureCallback = new Camera.PictureCallback() {
        @Override
        public void onPictureTaken(byte[] data, Camera camera) {
            FileOutputStream outputStream;
            File imageFile = getDirectory();
            if (!imageFile.exists() && !imageFile.mkdirs()) {
                Toast.makeText(getApplicationContext(),
                        "Nao foi possivel criar o directorio para a imagem.",
                        Toast.LENGTH_SHORT)
                        .show();
                return;
            }
            SimpleDateFormat format = new SimpleDateFormat("yyyymmddhhmmss", Locale.ENGLISH);
            String date = format.format(new Date());
            String photoFile = "Demo" + date + ".jpg";
            String fileName = imageFile.getAbsolutePath() + "/" + photoFile;
            File picFile = new File(fileName);
            try {
                outputStream = new FileOutputStream(picFile);
                outputStream.write(data);
                outputStream.close();
            } catch (IOException ignored) {
            }
            Toast.makeText(getApplicationContext(), "Picture Saved", Toast.LENGTH_SHORT)
                    .show();

            refreshCamera();
            refreshGallery(picFile);
        }
    };
}

 private void refreshGallery(File file) {
    Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    intent.setData(Uri.fromFile(file));
    sendBroadcast(intent);
}

 private void refreshCamera() {
    if (surfaceHolder.getSurface() == null) {
        // Preview surfave does not exists
        return;
    }
    // Stop the preview before making changes
    try {
        camera.stopPreview();
    } catch (Exception ignored) {
    }
    // Set the preview size, and make any resize, rotate or any reformmating changes here
    // Start preview with new Settings
    try {
        camera.setPreviewDisplay(surfaceHolder);
        camera.startPreview();
    } catch (Exception ignored) {
    }
}

 private File getDirectory() {
    File dics = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
    return new File(dics, "CameraActivity");
}

     private void cameraImage() {
    // Take the picture
    camera.takePicture(null, null, pictureCallback);
}

@SuppressWarnings("deprecation")
@Override
public void surfaceCreated(SurfaceHolder holder) {
    // Open the fuck'n Camera here
    releaseCamera();

    camera = Camera.open();

    Camera.Parameters parameters;
    parameters = camera.getParameters();

    // Modify the parameters
    parameters.setPreviewFrameRate(20);
    parameters.setPreviewSize(352, 288);
    camera.setParameters(parameters);
    camera.setDisplayOrientation(90);

    try {
        // The surface has been created, now tell the camera where to draw the preview
        camera.setPreviewDisplay(surfaceHolder);
    } catch (Exception ignored) {
    }
}

     private void releaseCamera(){
    if(camera != null){
        camera.release();
        camera = null;
    }
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
    refreshCamera();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    // Stop the preview and release the camera
    camera.stopPreview();
    camera.release();
    camera = null;
}