Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

android java lang runtimeexception fail to connect to camera service

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"/>
like image 649
Jigar Shekh Avatar asked May 28 '14 06:05

Jigar Shekh


7 Answers

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

like image 123
sam Avatar answered Nov 02 '22 21:11

sam


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!

like image 29
Jim Andreas Avatar answered Nov 02 '22 22:11

Jim Andreas


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);
}
like image 25
Jay Vyas Avatar answered Nov 02 '22 22:11

Jay Vyas


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.

like image 40
0xAliHn Avatar answered Nov 02 '22 21:11

0xAliHn


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();
like image 10
Mohammad nabil Avatar answered Nov 02 '22 21:11

Mohammad nabil


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

like image 5
Karim Baidar Avatar answered Nov 02 '22 21:11

Karim Baidar


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

How to 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/

like image 3
Bharadwaja Bapatla Avatar answered Nov 02 '22 20:11

Bharadwaja Bapatla