我尝试制作应用程序,而不是可以打开和关闭相机闪光灯。 我的代码看起来像这样:
Camera flash;
Camera.Parameters params;
flash = Camera.open();
params = flash.getParameters();
params.setFlashMode(Camera.Parameters.FLASH_MODE_TORCH);
flash.setParameters(params);
在清单xml中:
<permission android:name="android.permission.FLASHLIGHT"
android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
android:protectionLevel="normal" />
<permission android:name="android.permission.CAMERA"> </permission>
每次运行代码时,应用程序都会在“flash = Camera.open();”崩溃有这个错误:
java.lang.RuntimeException:无法连接到摄像头服务
我做错了什么?
答案 0 :(得分:34)
要访问设备相机,您必须在Android Manifest中声明CAMERA权限,
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
答案 1 :(得分:7)
您可能忘记在onDestroy
例如:
@Override
protected void onDestroy() {
if (mCamera != null) {
mCamera.release();
}
super.onDestroy();
}
答案 2 :(得分:2)
您需要以编程方式在android 6.x上添加新的请求权限。
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);
}
}
}
}
答案 3 :(得分:1)
通常这个问题是由于缺少相机请求权限,正如其他用户已经说过的那样。
但是,只是为了在这里注册另一个原因,如果您尝试使用不存在的cameraID打开相机,您将收到相同的错误
java.lang.RuntimeException:无法连接到摄像头服务