android java lang runtimeexception fail to connect to camera service

AndroidAndroid CameraFlashlight

Android Problem Overview


I am currently working on Flashlight On/OFF. I am getting this error java.lang.RuntimeException: Fail to connect to camera service I don't know why this error is occurring. I referred to many solutions but my problem was still not solved. When flashlight is on, the error does not occur but when the flashlight is off then the error occurs.

My Code Main Code.

My Manifest permission:

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

Android Solutions


Solution 1 - Android

I had the same issue that none of the answers here solved, so after solving it I am adding my way of solving it. This applies to new android versions that support setting permissions per app (since Marshmallow, 6.0). The permission for camera could be disabled and should be enabled from the app settings. Settings -> Apps -> [Your App] -> Permissions

More info about this here: http://developer.android.com/training/permissions/requesting.html

Solution 2 - Android

I also saw this error:

> java.lang.RuntimeException: Fail to connect to camera service

while experimenting with a flashlight app. Turns out that I was a bit sloppy with my permissions and copied them into the body of the application block in the manifest.xml file. So you REALLY need to obey the syntax as documented in:

http://developer.android.com/guide/topics/manifest/manifest-element.html

Otherwise the app will fail with service connection failure on the Camera.open() call. It should look like this based on your permissions in the question:

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

<application

Make sure your permission and feature list is contained only in the manifest section, and not buried in the application section!

Solution 3 - Android

try this...

 static Camera camera = null;

declare it on top.

 try{ 
   if(clickOn == true) {
       clickOn = false;
       camera = Camera.open();
       Parameters parameters = camera.getParameters();
       parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
       camera.setParameters(parameters);
       camera.startPreview();
   
       remoteViews.setViewVisibility(R.id.button1, View.GONE);
       remoteViews.setViewVisibility(R.id.button2, View.VISIBLE);
       localAppWidgetManager.updateAppWidget(componentName, remoteViews);
   } else {
       clickOn = true;
       camera.stopPreview();
       camera.release();
       camera = null;

       remoteViews.setViewVisibility(R.id.button1, View.VISIBLE);
       remoteViews.setViewVisibility(R.id.button2, View.GONE);
       localAppWidgetManager.updateAppWidget(componentName, remoteViews);
   }	
} catch(Exception e) {
   Log.e("Error", ""+e);
}

Solution 4 - Android

This problem may arise in android 6.0 if you didn't enable camera permission for your app. As from Android 6.0 you can handle the app permission weather you will give or not specific permission for an application.

So, you need to enable permission from settings->apps->your_app->enable camera permission if its not already enabled.

Solution 5 - Android

If your os version is 6.0 or later version try this, hope this will help.

public class RequestUserPermission {

private Activity activity;
// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.CAMERA
};

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

public  void verifyStoragePermissions() {
    // Check if we have write permission
    int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

    if (permission != PackageManager.PERMISSION_GRANTED) {
        // We don't have permission so prompt the user
        ActivityCompat.requestPermissions(
                activity,
                PERMISSIONS_STORAGE,
                REQUEST_EXTERNAL_STORAGE
        );
    }
}
}


**//CALL FROM YOUR ACTIVITY**
 RequestUserPermission requestUserPermission = new RequestUserPermission(this);
    requestUserPermission.verifyStoragePermissions();

Solution 6 - Android

if you try to open the camera using a cameraID that does not exist, you will receive that same error (java.lang.RuntimeException: Fail to Connect to camera service)

look at your code at this block

camera.setParameters(parameters);
camera.stopPreview();
camera.release();
camera = null;

Call release() to release the camera for use by other applications. Applications should release the camera immediately in onPause() (and re-open() it in onResume().

In above code imediately after release you are putting null to camera

Solution 7 - Android

Hi i hope you are dealing with a torch kind of app or something related to flash and there were many discussions went on this before and here are some useful links and tutorials to achieve your need, please go through them hope they may help you

https://stackoverflow.com/questions/6068803/how-turn-on-camera-flash-light-programmatically-in-android

http://www.androidhive.info/2013/04/android-developing-flashlight-application/

http://www.compiletimeerror.com/2013/08/how-to-turn-onoff-camera-led-flashlight.html#.U4WH5Xbc3o4

http://android.programmerguru.com/android-flashlight-example/

Solution 8 - Android

You need to stopPreview() and release() once you came back from camera, so that other application can able to access it. Make the "Camera" class as static and refer it as null in onPause(). This resolves my Issue.

Try it out:

 public class CameraPhotoCapture extends Activity{
    static Camera mcamera = null;
	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		if (mcamera != null) {
			mcamera.stopPreview();
			mcamera.release();
			mcamera = null;
			Log.d(DEBUG_TAG, "releaseCamera -- done");
		}
		super.onPause();
	}

	@Override
	protected void onResume() {
		// TODO Auto-generated method stub
		if (mcamera != null) {

			Camera.open();
			Log.d(DEBUG_TAG, "openCamera -- done");
		}
		super.onResume();
	}
}

Solution 9 - Android

The simple answer I can find to this problem is I was not asking for camera permission to the user, and that's why by default camera permission was not available to my app on Marshmallow devices. I simply added permission check for the camera before starting the camera and everything works fine.

Solution 10 - Android

private boolean checkPermission() {
    if (ContextCompat.checkSelfPermission(getApplicationContext(),
            android.Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
        return true;
    }
    return false;
}

Check the camera permission at runtime, and request the permission if it has not be granted. It works for me.

    if (checkPermission()) {
        initCamera();
    } else {
        ActivityCompat.requestPermissions(this,
                new String[]{android.Manifest.permission.CAMERA}, REQUEST_CAMERA_PERMISSION);
    }

Solution 11 - Android

Try to use this line, when you're exiting the app :

System.exit(0);

I just got a code of an Flashlight app from somewhere. It was using System.exit(0) to close the app. I removed it, knowing that this is not a good practice. Then I started to receive these errors. I tried the solution of the accepted answer, but then I started receiving some other errors. So, instead of solving them I just put this System.exit(0) line back. And, it started working fine. I know this is not a good way, but for a small flashlight app, you can try this quick solution.

Solution 12 - Android

  1. Set the Required permission in Mainfest file.

  2. Ask the Permission to accept the Camera.

It will work for me

Solution 13 - Android

If all your code is ok, you should check are there any other application using your camera. Then you should close other application that currently using your camera.

Solution 14 - Android

In my android peoject has the same issue. This is my Logcat error


> 03-29 19:26:04.194 224-608/? V/EmulatedCamera_BaseCamera: > getCameraInfo 03-29 19:26:04.196 224-224/? I/CameraService: > CameraService::connect call (PID -1 "com.proitzen.staffapp", camera ID > 1) for HAL version default and Camera API version 1 03-29 19:26:04.196 > 224-224/? W/ServiceManager: Permission failure: > android.permission.CAMERA from uid=10067 pid=1776 03-29 19:26:04.196 > 224-224/? E/CameraService: Permission Denial: can't use the camera > pid=1776, uid=10067 03-29 19:26:04.196 1776-1776/com.proitzen.staffapp > W/CameraBase: An error occurred while connecting to camera 1: Service > not available 03-29 19:26:04.200 1776-1776/com.proitzen.staffapp > D/AndroidRuntime: Shutting down VM


No any above solutions worked for me. My android app worked in physical android devices and gave the above error only in Genymotion.

Solution : start your Genumotion emulator Settings --> Apps ---> choose your App --> Permissions --> enable camera and Mic and storage.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJigar ShekhView Question on Stackoverflow
Solution 1 - AndroidsamView Answer on Stackoverflow
Solution 2 - AndroidJim AndreasView Answer on Stackoverflow
Solution 3 - AndroidJay VyasView Answer on Stackoverflow
Solution 4 - Android0xAliHnView Answer on Stackoverflow
Solution 5 - AndroidMohammad nabilView Answer on Stackoverflow
Solution 6 - AndroidKarim BaidarView Answer on Stackoverflow
Solution 7 - AndroidBharadwaja BapatlaView Answer on Stackoverflow
Solution 8 - Androidanand krishView Answer on Stackoverflow
Solution 9 - AndroidKeval PatelView Answer on Stackoverflow
Solution 10 - AndroidSaintView Answer on Stackoverflow
Solution 11 - AndroidAshish TannaView Answer on Stackoverflow
Solution 12 - AndroidArockia jenithaView Answer on Stackoverflow
Solution 13 - AndroidMarsPeopleView Answer on Stackoverflow
Solution 14 - AndroidlaisView Answer on Stackoverflow