31

enter image description here

When I launch the Camera application I am getting this error, and this is my logcat.

12-08 12:50:10.393 2275-2369/com.android.launcher3 E/Surface: getSlotFromBufferLocked: unknown buffer: 0xa21675b0
12-08 12:50:10.509 965-3048/? E/CameraService: CameraService::connect X (PID 3209) rejected (invalid camera ID 0)
12-08 12:50:10.510 3209-3224/com.android.camera E/CameraHolder: fail to connect Camera
12-08 12:50:10.510 3209-3224/com.android.camera E/CameraHolder: java.lang.RuntimeException: Fail to connect to camera service
12-08 12:50:10.510 3209-3224/com.android.camera E/CameraHolder:     at android.hardware.Camera.<init>(Camera.java:495)
12-08 12:50:10.510 3209-3224/com.android.camera E/CameraHolder:     at android.hardware.Camera.open(Camera.java:341)
12-08 12:50:10.510 3209-3224/com.android.camera E/CameraHolder:     at com.android.camera.CameraHolder.open(CameraHolder.java:131)
12-08 12:50:10.510 3209-3224/com.android.camera E/CameraHolder:     at com.android.camera.Util.openCamera(Util.java:267)
12-08 12:50:10.510 3209-3224/com.android.camera E/CameraHolder:     at com.android.camera.Camera$3.run(Camera.java:1100)
12-08 12:50:10.510 3209-3224/com.android.camera E/CameraHolder:     at java.lang.Thread.run(Thread.java:818)
12-08 12:50:10.511 3209-3224/com.android.camera E/AndroidRuntime: FATAL EXCEPTION: Thread-179
12-08 12:50:10.511 3209-3224/com.android.camera E/AndroidRuntime: Process: com.android.camera, PID: 3209
12-08 12:50:10.511 3209-3224/com.android.camera E/AndroidRuntime: java.lang.RuntimeException: openCamera failed
12-08 12:50:10.511 3209-3224/com.android.camera E/AndroidRuntime:     at com.android.camera.Util.openCamera(Util.java:272)
12-08 12:50:10.511 3209-3224/com.android.camera E/AndroidRuntime:     at com.android.camera.Camera$3.run(Camera.java:1100)
12-08 12:50:10.511 3209-3224/com.android.camera E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:818)
12-08 12:50:10.511 3209-3224/com.android.camera E/AndroidRuntime:  Caused by: com.android.camera.CameraHardwareException: java.lang.RuntimeException: Fail to connect to camera service
12-08 12:50:10.511 3209-3224/com.android.camera E/AndroidRuntime:     at com.android.camera.CameraHolder.open(CameraHolder.java:135)
12-08 12:50:10.511 3209-3224/com.android.camera E/AndroidRuntime:     at com.android.camera.Util.openCamera(Util.java:267)
12-08 12:50:10.511 3209-3224/com.android.camera E/AndroidRuntime:     at com.android.camera.Camera$3.run(Camera.java:1100) 
12-08 12:50:10.511 3209-3224/com.android.camera E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:818) 
12-08 12:50:10.511 3209-3224/com.android.camera E/AndroidRuntime:  Caused by: java.lang.RuntimeException: Fail to connect to camera service
12-08 12:50:10.511 3209-3224/com.android.camera E/AndroidRuntime:     at android.hardware.Camera.<init>(Camera.java:495)
12-08 12:50:10.511 3209-3224/com.android.camera E/AndroidRuntime:     at android.hardware.Camera.open(Camera.java:341)
12-08 12:50:10.511 3209-3224/com.android.camera E/AndroidRuntime:     at com.android.camera.CameraHolder.open(CameraHolder.java:131)
12-08 12:50:10.511 3209-3224/com.android.camera E/AndroidRuntime:     at com.android.camera.Util.openCamera(Util.java:267) 
12-08 12:50:10.511 3209-3224/com.android.camera E/AndroidRuntime:     at com.android.camera.Camera$3.run(Camera.java:1100) 
12-08 12:50:10.511 3209-3224/com.android.camera E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:818) 
12-08 12:50:10.671 954-954/? E/EGL_emulation: tid 954: eglCreateSyncKHR(1243): error 0x3004 (EGL_BAD_ATTRIBUTE)

and this is my config.ini

avd.ini.encoding=UTF-8
AvdId=Nexus_S_API_23
abi.type=x86
avd.ini.displayname=Nexus S API 23
disk.dataPartition.size=200M
hw.accelerometer=yes
hw.audioInput=yes
hw.battery=yes
hw.camera.back=webcam0
hw.camera.front=none
hw.cpu.arch=x86
hw.dPad=no
hw.device.hash2=MD5:37a2ff6e511626ba3ceddec8264474be
hw.device.manufacturer=Google
hw.device.name=Nexus S
hw.gps=yes
hw.gpu.enabled=yes
hw.keyboard=yes
hw.lcd.density=240
hw.mainKeys=yes
hw.ramSize=343
hw.sdCard=yes
hw.sensors.orientation=yes
hw.sensors.proximity=yes
hw.trackBall=no
image.sysdir.1=system-images\android-23\google_apis\x86\
runtime.network.latency=none
runtime.network.speed=full
runtime.scalefactor=auto
sdcard.size=100M
skin.dynamic=yes
skin.name=nexus_s
skin.path=C:\Program Files\Android\Android Studio\plugins\android\lib\device-art-resources\nexus_s
snapshot.present=no
tag.display=Google APIs
tag.id=google_apis
vm.heapSize=32

I also faced this error.

emulator -webcam-list -avd Nexus_S_API_23
emulator: WARNING: Increasing RAM size to 1GB
emulator: ERROR: camera_device_start_capturing: Device 'AndroidEmulatorVC0' is unable to save frame to the clipboard: 0

Note: I am getting an error when I am trying to download an image from the Android browser.

Hal Mueller
  • 7,019
  • 2
  • 24
  • 42

7 Answers7

10

Edit

Have you tried one of these ? It seems like your camera service didn't work properly / camera may be used for another application.

Failed to connect to camera service

Use the web camera in the android emulator


I use MacOSX by the way. i just say that, it works on my machine. I sent installed tools and logs. Maybe it helps.

VD Configuration

Nexus 5, API 23 (Both Cameras are selected)

When i start the emulator, it gives warning in the log but at in the end it worked.

Logs

WARNING: Camera name 'webcam0' is not found in the list of connected cameras.

12-12 22:59:15.060 2060-2079/com.android.camera V/CameraHolder: open camera 0
12-12 22:59:15.060 1019-1730/? I/CameraService: CameraService::connect call (PID 2060 "com.android.camera", camera ID 0) for HAL version default and Camera API version 1
12-12 22:59:15.060 1019-1730/? V/EmulatedCamera_Camera: getCameraInfo
12-12 22:59:15.060 1019-1730/? V/EmulatedCamera_BaseCamera: getCameraInfo
12-12 22:59:15.060 1019-1730/? W/AudioFlinger: acquireAudioSessionId() unknown client 2060 for session 7
12-12 22:59:15.060 1019-2081/? D/NuPlayerDriver: notifyListener_l(0xf619af80), (1, 0, 0)
12-12 22:59:15.060 1019-1730/? W/AudioFlinger: acquireAudioSessionId() unknown client 2060 for session 8
12-12 22:59:15.070 1019-2083/? D/NuPlayerDriver: notifyListener_l(0xf619afe0), (1, 0, 0)
12-12 22:59:15.070 1019-1730/? I/CameraClient: Opening camera 0
12-12 22:59:15.070 1019-1730/? V/EmulatedCamera_Camera: getCameraInfo
12-12 22:59:15.070 1019-1730/? V/EmulatedCamera_BaseCamera: getCameraInfo
12-12 22:59:15.070 1019-1730/? V/EmulatedCamera_Camera: connectCamera
12-12 22:59:15.070 1019-1730/? V/EmulatedCamera_QemuDevice: connectDevice
12-12 22:59:15.100 2059-2059/? D/AndroidRuntime: Calling main entry com.android.commands.pm.Pm
12-12 22:59:15.110 1019-1730/? V/EmulatedCamera_QemuDevice: connectDevice: Connected to device 'webcam0'
12-12 22:59:15.110 1019-1730/? V/EmulatedCamera_CallbackNotifier: setCallbacks: 0xf75d1505, 0xf75d1dba, 0xf75d1c92, 0xf75d2267 (0xf619b040)
12-12 22:59:15.110 1019-1730/? V/EmulatedCamera_CallbackNotifier: enableMessage: msg_type = 0xc0d
12-12 22:59:15.110 1019-1730/? V/EmulatedCamera_CallbackNotifier:     CAMERA_MSG_ERROR
12-12 22:59:15.110 1019-1730/? V/EmulatedCamera_CallbackNotifier:     CAMERA_MSG_FOCUS
12-12 22:59:15.110 1019-1730/? V/EmulatedCamera_CallbackNotifier:     CAMERA_MSG_ZOOM
12-12 22:59:15.110 1019-1730/? V/EmulatedCamera_CallbackNotifier:     CAMERA_MSG_PREVIEW_METADATA
12-12 22:59:15.110 1019-1730/? V/EmulatedCamera_CallbackNotifier: **** Currently enabled messages:
12-12 22:59:15.110 1019-1730/? V/EmulatedCamera_CallbackNotifier:     CAMERA_MSG_ERROR
12-12 22:59:15.110 1019-1730/? V/EmulatedCamera_CallbackNotifier:     CAMERA_MSG_FOCUS
12-12 22:59:15.110 1019-1730/? V/EmulatedCamera_CallbackNotifier:     CAMERA_MSG_ZOOM
12-12 22:59:15.110 1019-1730/? V/EmulatedCamera_CallbackNotifier:     CAMERA_MSG_PREVIEW_METADATA
12-12 22:59:15.120 1350-1374/system_process I/ActivityManager: Start proc 2086:com.android.defcontainer/u0a3 for service com.android.defcontainer/.DefaultContainerService
12-12 22:59:15.160 2086-2098/com.android.defcontainer D/DefContainer: Copying /data/local/tmp/com.example.volkangurol.myapplication to base.apk
12-12 22:59:15.210 1449-1449/com.android.systemui D/PhoneStatusBar: disable: < expand ICONS alerts SYSTEM_INFO back home* recent* clock search* quick_settings >
12-12 22:59:15.210 2060-2103/com.android.camera D/Camera: app passed NULL surface
12-12 22:59:15.210 1019-1619/? V/EmulatedCamera_Camera: getCameraInfo
12-12 22:59:15.210 1019-1619/? V/EmulatedCamera_BaseCamera: getCameraInfo
12-12 22:59:15.230 2060-2103/com.android.camera V/camera: Preview size is 640x480
12-12 22:59:15.230 1019-1019/? V/EmulatedCamera_Camera: setParameters
12-12 22:59:15.230 1019-1019/? D/EmulatedCamera_Camera: === Value changed: jpeg-quality: 90 -> 95
12-12 22:59:15.230 1019-1019/? D/EmulatedCamera_Camera: === Value changed: preview-frame-rate: 24 -> 30
12-12 22:59:15.230 1019-1019/? D/EmulatedCamera_Camera: +++ New parameter: recording-hint=false
12-12 22:59:15.230 2060-2103/com.android.camera V/camera: startPreview
12-12 22:59:15.230 1019-1380/? V/EmulatedCamera_Preview: setPreviewWindow: current: 0x0 -> new: 0x0
12-12 22:59:15.230 1019-1380/? V/EmulatedCamera_Camera: doStartPreview
12-12 22:59:15.230 1019-1380/? V/EmulatedCamera_Preview: startPreview
12-12 22:59:15.230 1019-1380/? D/EmulatedCamera_Camera: Starting camera: 640x480 -> NV21(yuv420sp)
12-12 22:59:15.230 1019-1380/? V/EmulatedCamera_QemuDevice: startDevice
12-12 22:59:15.230 1019-1380/? V/EmulatedCamera_Device: commonStartDevice: Allocated 0xf3f00000 460800 bytes for 307200 pixels in NV21[640x480] frame
12-12 22:59:15.230 1019-1380/? V/EmulatedCamera_QemuDevice: startDevice: Qemu camera device 'webcam0' is started for NV21[640x480] frames
12-12 22:59:15.230 1019-1380/? V/EmulatedCamera_Device: startDeliveringFrames
12-12 22:59:15.230 1019-1380/? V/EmulatedCamera_Device: startWorkerThread
12-12 22:59:15.260 1019-2104/? V/EmulatedCamera_Device: Starting emulated camera device worker thread...

enter image description here

Community
  • 1
  • 1
wseries
  • 490
  • 5
  • 14
3

With Android API >= 23, you must ask for permission in code like:

int REQUEST_PERMISSION= 100;
int cameraPermission = this.checkSelfPermission(Manifest.permission.CAMERA);
if (android.os.Build.VERSION.SDK_INT >= 23) {
  if (cameraPermission != PackageManager.PERMISSION_GRANTED  ) {


      this.requestPermissions(
            new String[]{Manifest.permission.CAMERA },
            REQUEST_PERMISSION
    );
  }
}

Now ok to run.

searching9x
  • 1,515
  • 16
  • 16
  • You also have to add permissions in AndroidManifest.xml. See https://stackoverflow.com/questions/7829162/failed-to-connect-to-camera-service?noredirect=1&lq=1 – Eden Jan 19 '20 at 19:47
0

The solution is simple: You cannot run a camera when using a virtual machine unless you link the action of opening the VM camera to opening your webcam.

Kayofeld
  • 139
  • 1
  • 11
0

Starting with API 23 you need to request permissions at runtime. This was not the case in API <23 . For API <23 permissions in the manifest is enough.

This is an example from Android Developers :

Check for permission :

// Assume thisActivity is the current activity
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
        Manifest.permission.WRITE_CALENDAR);

Request permission :

// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
                Manifest.permission.READ_CONTACTS)
        != PackageManager.PERMISSION_GRANTED) {

    // Should we show an explanation?
    if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
            Manifest.permission.READ_CONTACTS)) {

        // Show an expanation to the user *asynchronously* -- don't block
        // this thread waiting for the user's response! After the user
        // sees the explanation, try again to request the permission.

    } else {

        // No explanation needed, we can request the permission.

        ActivityCompat.requestPermissions(thisActivity,
                new String[]{Manifest.permission.READ_CONTACTS},
                MY_PERMISSIONS_REQUEST_READ_CONTACTS);

        // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
        // app-defined int constant. The callback method gets the
        // result of the request.
    }
}

Request response :

@Override
public void onRequestPermissionsResult(int requestCode,
        String permissions[], int[] grantResults) {
    switch (requestCode) {
        case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {
            // If request is cancelled, the result arrays are empty.
            if (grantResults.length > 0
                && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                // permission was granted, yay! Do the
                // contacts-related task you need to do.

   

     } else {

            // permission denied, boo! Disable the
            // functionality that depends on this permission.
        }
        return;
    }

    // other 'case' lines to check for other
    // permissions this app might request
}
}

If you don't handle like that way you can't use camera on API's >= 23

Not all permissions needs to be granted by the user but only dangerous permissions (Camera , Location , ) :

http://developer.android.com/guide/topics/security/permissions.html#normal-dangerous

General Grievance
  • 4,555
  • 31
  • 31
  • 45
David
  • 840
  • 6
  • 17
  • 37
  • Did you add the camera permissions to the manifest ? As Ravi Hari said ? You commented that you are using Android Studio on that answer but you still need to add it to the manifest in Android Studio.. – David Dec 17 '15 at 10:30
  • I am using com.android.camera – Mohammed Subhi Sheikh Quroush Dec 17 '15 at 10:35
  • That's the package .. Do you know what a android manifest is ? You can find it when you switch to Android View and then select app->manifests->AndroidManifest.xml – David Dec 17 '15 at 10:46
0

Quoting developers.android.com:

Beginning in Android 6.0 (API level 23), users grant permissions to apps while the app is running, not when they install the app. This approach streamlines the app install process, since the user does not need to grant permissions when they install or update the app. It also gives the user more control over the app's functionality; for example, a user could choose to give a camera app access to the camera but not to the device location. The user can revoke the permissions at any time, by going to the app's Settings screen.

System permissions are divided into two categories, normal and dangerous:

  • Normal permissions do not directly risk the user's privacy. If your app lists a normal permission in its manifest, the system grants the
    permission automatically.
  • Dangerous permissions can give the app access to the user's confidential data. If your app lists a normal permission in its
    manifest, the system grants the permission automatically. If you list a dangerous permission, the user has to explicitly give approval to
    your app.

So, I accomplished my task like as below:

For Checking permission I created a separate class as below:

public class MarshMallowPermission {

    public static final int RECORD_PERMISSION_REQUEST_CODE = 1;
    public static final int EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE = 2;
    public static final int CAMERA_PERMISSION_REQUEST_CODE = 3;
    Activity activity;

    public MarshMallowPermission(Activity activity) {
        this.activity = activity;
    }

    public boolean checkPermissionForRecord(){
        int result = ContextCompat.checkSelfPermission(activity, Manifest.permission.RECORD_AUDIO);
        if (result == PackageManager.PERMISSION_GRANTED){
            return true;
        } else {
            return false;
        }
    }

    public boolean checkPermissionForExternalStorage(){
        int result = ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
        if (result == PackageManager.PERMISSION_GRANTED){
            return true;
        } else {
            return false;
        }
    }

    public boolean checkPermissionForCamera(){
        int result = ContextCompat.checkSelfPermission(activity, Manifest.permission.CAMERA);
        if (result == PackageManager.PERMISSION_GRANTED){
            return true;
        } else {
            return false;
        }
    }

    public void requestPermissionForRecord(){
        if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.RECORD_AUDIO)){
           Toast.makeText(activity, "Microphone permission needed for recording. Please allow in App Settings for additional functionality.", Toast.LENGTH_LONG).show();
        } else {
            ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.RECORD_AUDIO},RECORD_PERMISSION_REQUEST_CODE);
        }
    }

    public void requestPermissionForExternalStorage(){
        if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)){
            Toast.makeText(activity, "External Storage permission needed. Please allow in App Settings for additional functionality.", Toast.LENGTH_LONG).show();
        } else {
            ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},EXTERNAL_STORAGE_PERMISSION_REQUEST_CODE);
        }
    }

    public void requestPermissionForCamera(){
        if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.CAMERA)){
            Toast.makeText(activity, "Camera permission needed. Please allow in App Settings for additional functionality.", Toast.LENGTH_LONG).show();
        } else {
            ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.CAMERA},CAMERA_PERMISSION_REQUEST_CODE);
        }
    }
}

Then, for getting

...
MarshMallowPermission marshMallowPermission = new MarshMallowPermission(this);
...

public void getPhotoFromCamera() {

    if (!marshMallowPermission.checkPermissionForCamera()) {
        marshMallowPermission.requestPermissionForCamera();
    } else {
        if (!marshMallowPermission.checkPermissionForExternalStorage()) {
            marshMallowPermission.requestPermissionForExternalStorage();
        } else {
            Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            File mediaStorageDir = new File(
                    Environment.getExternalStorageDirectory()
                            + File.separator
                            + getString(R.string.directory_name_corp_chat)
                            + File.separator
                            + getString(R.string.directory_name_images)
            );

            if (!mediaStorageDir.exists()) {
                mediaStorageDir.mkdirs();
            }

            String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss",
                    Locale.getDefault()).format(new Date());
            try {
                mediaFile = File.createTempFile(
                        "IMG_" + timeStamp,  /* prefix */
                        ".jpg",         /* suffix */
                        mediaStorageDir      /* directory */
                );
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(mediaFile));
                startActivityForResult(takePictureIntent, PICK_FROM_CAMERA);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
Chintan Soni
  • 24,761
  • 25
  • 106
  • 174
0

May be your Pc or Mac should have working camera or camera simulation must be installed..

Pradeep Sapkota
  • 2,041
  • 1
  • 16
  • 30
0

You have to set you your camera in the AVD options. (By default you can have NONE, NONE)

AVD Camera Options

Jakub S.
  • 5,580
  • 2
  • 42
  • 37