Android 相机没有响应(无法连接到相机服务)
Android Camera is not responding (Fail to connect to camera service)
我知道有很多这样的问题。但是,对我来说没有任何效果。我正在通过自学指南学习 android。我的任务是使用 Camera class 实现相机服务。我知道相机已被弃用。但是,我打算使用相机 class 制作它 运行。我无法连接到相机服务错误。我什至没有得到相机预览。当我 运行 相机时,我得到的只是黑屏和我点击图片的点击按钮。但是,运行第二次使用它会冻结我的手机,我必须拔出并放入电池才能再次工作。到目前为止,我已经获得了相机 class 需要的所有权限
清单:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera2.full"></uses-feature>
<application>....</application>
我正在确保在所有需要的地方释放相机。我了解到当我们没有正确释放相机时会出现此错误。
我的 onPause() 方法
@Override
public void onPause()
{
super.onPause();
if(camera!=null)
{
camera.release();
camera=null;
}
}
我的 onResume 方法
@Override
public void onResume()
{
super.onResume();
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.GINGERBREAD)
{
camera.open(0);
}
else {
camera.open();
}
我的surfaceDestroyed方法
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if(camera!=null)
{
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera=null;
}
}
我的surfaceCreated方法
public void surfaceCreated(SurfaceHolder holder) {
if(camera!=null)
{
try {
camera.setPreviewDisplay(holder);
} catch (IOException e) {
Log.e(TAG, "ERROR SETTING UP PREVIEW", e);
}
}
}
我的控制台输出:
Process: course.examples.criminalintent, PID: 12954
java.lang.RuntimeException: Unable to resume activity {course.examples.criminalintent/course.examples.criminalintent.CrimeCameraActivity}: java.lang.RuntimeException: Fail to connect to camera service
经过一番调试,我发现我的摄像头一直是null。这解释了为什么我无法在屏幕上看到相机预览。但是,我不明白为什么它会冻结我的手机,我应该如何让它正常工作?请详细说明。谢谢!
我想通了!我的 onResume() 方法的第一个错误是它没有包含在 try catch 块中。此外,我将 0 等常量替换为 (Camera.CameraInfo.CAMERA_FACING_FRONT).
等常量
其次,我收到参数失败错误。我通过删除 setPreviewFormat(format) 语句删除了该错误。
以下是我所做的更改:
更新了 onResume() 方法
try {
releaseCameraAndPreview();
if (Id == 0) {
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
}
else {
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);
}
} catch (Exception e) {
Log.e(getString(R.string.app_name), "failed to open Camera");
e.printStackTrace();
}
我知道有很多这样的问题。但是,对我来说没有任何效果。我正在通过自学指南学习 android。我的任务是使用 Camera class 实现相机服务。我知道相机已被弃用。但是,我打算使用相机 class 制作它 运行。我无法连接到相机服务错误。我什至没有得到相机预览。当我 运行 相机时,我得到的只是黑屏和我点击图片的点击按钮。但是,运行第二次使用它会冻结我的手机,我必须拔出并放入电池才能再次工作。到目前为止,我已经获得了相机 class 需要的所有权限 清单:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera2.full"></uses-feature>
<application>....</application>
我正在确保在所有需要的地方释放相机。我了解到当我们没有正确释放相机时会出现此错误。 我的 onPause() 方法
@Override
public void onPause()
{
super.onPause();
if(camera!=null)
{
camera.release();
camera=null;
}
}
我的 onResume 方法
@Override
public void onResume()
{
super.onResume();
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.GINGERBREAD)
{
camera.open(0);
}
else {
camera.open();
}
我的surfaceDestroyed方法
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
if(camera!=null)
{
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera=null;
}
}
我的surfaceCreated方法
public void surfaceCreated(SurfaceHolder holder) {
if(camera!=null)
{
try {
camera.setPreviewDisplay(holder);
} catch (IOException e) {
Log.e(TAG, "ERROR SETTING UP PREVIEW", e);
}
}
}
我的控制台输出:
Process: course.examples.criminalintent, PID: 12954
java.lang.RuntimeException: Unable to resume activity {course.examples.criminalintent/course.examples.criminalintent.CrimeCameraActivity}: java.lang.RuntimeException: Fail to connect to camera service
经过一番调试,我发现我的摄像头一直是null。这解释了为什么我无法在屏幕上看到相机预览。但是,我不明白为什么它会冻结我的手机,我应该如何让它正常工作?请详细说明。谢谢!
我想通了!我的 onResume() 方法的第一个错误是它没有包含在 try catch 块中。此外,我将 0 等常量替换为 (Camera.CameraInfo.CAMERA_FACING_FRONT).
等常量其次,我收到参数失败错误。我通过删除 setPreviewFormat(format) 语句删除了该错误。
以下是我所做的更改:
更新了 onResume() 方法
try {
releaseCameraAndPreview();
if (Id == 0) {
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_FRONT);
}
else {
camera = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);
}
} catch (Exception e) {
Log.e(getString(R.string.app_name), "failed to open Camera");
e.printStackTrace();
}