Android 4上packageManager.hasSystemFeature(packageManager.FEATURE\u CAMERA\u FLASH)的java.lang.verifyError

Android 4上packageManager.hasSystemFeature(packageManager.FEATURE\u CAMERA\u FLASH)的java.lang.verifyError,android,Android,第1部分:正如标题所示,我在检查设备是否有闪存的代码行中遇到java.lang.verifyError if(packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) { //do something.. } 第2部分:另外,在代码中的另一个地方 if(Build.VERSION.SDK_INT >= 23) { try { CameraManager camManager = (Cam

第1部分:正如标题所示,我在检查设备是否有闪存的代码行中遇到java.lang.verifyError

if(packageManager.hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH)) {
     //do something..
}
第2部分:另外,在代码中的另一个地方

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) { }
}
然后我在这一行得到java.lang.VerifyError:CameraManager=(CameraManager)context.getSystemService(context.CAMERA_SERVICE)

这两个错误只发生在Android 4.2和4.3上,Google Play ANR&Crash没有提供额外信息

关于我做错了什么,以及如何纠正的任何见解

相关舱单条目:

<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" />
类FlashOnClickListener()是同一java文件中的一个内部类,在onClick()方法中执行此操作:

if(Build.VERSION.SDK\u INT>=23){
试一试{
CameraManager=(CameraManager)mContext.getSystemService(Context.CAMERA_服务);
//通常前摄像头位于0位置。
如果(camManager!=null){
mCameraId=camManager.getCameraIdList()[0];
camManager.setTorchMode(mCameraId,true);
theFlash.setImageResource(R.drawable.ic\u highlight\u black\u 24dp);
}
}捕获(CameraAccessE异常){
}
}否则{
试一试{
mCamera=Camera.open();
Camera.Parameters=mCamera.getParameters();
List flashModes=parameters.getSupportedFlashModes();
if(flashModes!=null&&flashModes.contains(android.hardware.Camera.Parameters.FLASH\u MODE\u TORCH)){
参数设置闪光模式(参数闪光模式);
mCamera.setParameters(参数);
mCamera.startPreview();
theFlash.setImageResource(R.drawable.ic\u highlight\u black\u 24dp);
}
}捕获(例外e){
}
}

共享您的
AndroidMenifest.xml
文件。确认设备上有可用的闪存,然后设置。参考:@RajasekaranM这正是我想做的-通过'if(packageManager.hasSystemFeature(packageManager.FEATURE_-CAMERA_-flash))'确认设备上的闪存可用性,但这会在Android 4.2和4.3上抛出java.lang.Error,但在其他操作系统版本上运行良好。你的意思是说我需要根据操作系统版本编写单独的代码吗?谢谢是的,没错,你需要检查操作系统版本,并检查手机上是否有闪存。用这个
flashBtnListener = new FlashOnClickListener();
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) {

    }
}