Android 4上packageManager.hasSystemFeature(packageManager.FEATURE\u CAMERA\u FLASH)的java.lang.verifyError
第1部分:正如标题所示,我在检查设备是否有闪存的代码行中遇到java.lang.verifyErrorAndroid 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
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) {
}
}