Part 1: As title suggest I am getting a java.lang.verifyError at a line in my code where I am checking if the device has a Flash.
if(packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) {
//do something..
}
Part 2: Also, at another place in the code where I have
if(Build.VERSION.SDK_INT >= 23) {
try {
CameraManager camManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
// Usually front camera is at 0 position.
if (camManager != null) {
mcamid = camManager.getCameraIdList()[0];
camManager.setTorchMode(mcamid, true);
}
} catch (CameraAccessException e) { }
}
then I get java.lang.VerifyError at this line: CameraManager camManager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);
Both errors only happen on Android 4.2 and 4.3 and no extra information is provided by Google Play ANR & Crashes.
Any insights on what I am doing wrong, and how it can be corrected?
Relevant Manifest Entries:
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-feature
android:name="android.hardware.camera.flash"
android:required="false" />
<!-- android.permission-group.CAMERA -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature
android:name="android.hardware.camera"
android:required="false" />
Update 1: On closer scrutiny I find that the java.lang.VerifyError is happening exactly on the line where I create a new Listener on Android 4.2 / 4.1
flashBtnListener = new FlashOnClickListener();
The class FlashOnClickListener() is an inner class in the same java file and does this in onClick() method:
if(Build.VERSION.SDK_INT >= 23) {
try {
CameraManager camManager = (CameraManager) mContext.getSystemService(Context.CAMERA_SERVICE);
// Usually front camera is at 0 position.
if (camManager != null) {
mCameraId = camManager.getCameraIdList()[0];
camManager.setTorchMode(mCameraId, true);
theFlash.setImageResource(R.drawable.ic_highlight_black_24dp);
}
} catch (CameraAccessException e) {
}
} else {
try {
mCamera = Camera.open();
Camera.Parameters parameters = mCamera.getParameters();
List<String> flashModes = parameters.getSupportedFlashModes();
if (flashModes != null && flashModes.contains(android.hardware.Camera.Parameters.FLASH_MODE_TORCH)) {
parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
mCamera.setParameters(parameters);
mCamera.startPreview();
theFlash.setImageResource(R.drawable.ic_highlight_black_24dp);
}
} catch (Exception e) {
}
}