Reputation: 103
I tried to make an app than can switch my camera flash on and off. The code I have atm looks like this:
Camera flash;
Camera.Parameters params;
flash = Camera.open();
params = flash.getParameters();
params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
flash.setParameters(params);
And in the manifest xml:
<permission android:name="android.permission.FLASHLIGHT"
android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
android:protectionLevel="normal" />
<permission android:name="android.permission.CAMERA"> </permission>
Everytime I run the code, the app crashes at "flash = Camera.open();" with this error:
java.lang.RuntimeException: Fail to Connect to camera service
What am I doing wrong?
Upvotes: 10
Views: 27724
Reputation: 1789
You need to add the new request permission on android 6.x programmatically before.
private static final int MY_PERMISSIONS_REQUEST_CAMERA = 555;
if (ContextCompat.checkSelfPermission(getActivity(), android.Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(getActivity(), new String[]{android.Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA);
} else {
IntentIntegrator.forSupportFragment(this).initiateScan();
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_CAMERA: {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
IntentIntegrator.forSupportFragment(this).initiateScan();
} else {
FragmentHelper.popFragment(getActivity(), null, null);
}
}
}
}
Upvotes: 3
Reputation: 10678
Usually that problem is due to the missing camera request permission, as already said by other users.
But, just to register here another cause, 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
Upvotes: 3
Reputation: 778
You might have forgotten to call release in onDestroy
For example:
@Override
protected void onDestroy() {
if (mCamera != null) {
mCamera.release();
}
super.onDestroy();
}
Upvotes: 9
Reputation: 10223
To access the device camera, you must declare the CAMERA permission in your Android Manifest like this,
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
Upvotes: 35