0

我在使用Android相机时遇到问题。Android“Camera camera = Camera.open();”时每次都会抛出错误,叫做

在API 25 Nougat 7.1.1 SDK上开发。闵目标SDK设置为15

它在调用时抛出错误每次:

Camera camera = Camera.open(); 

出现错误“的RuntimeException:无法连接到相机的服务”,这可以从我的模拟器可以看到(的Nexus 5X API 25 Android 7.1.1)

在真实设备(Android 5.1.1)上测试相机功能不起作用 - 完全相同的问题。

下面是代码:

import android.hardware.Camera; 

... 

boolean hasCamera = false; 

private boolean hasCamera(Context context) { 
     return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA); 
    } 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    ... 

    hasCamera = hasCamera(this); 
    if(!hasCamera) { 
     takePhotoButton.setText("No Camera Found"); 
     takePhotoButton.setEnabled(false); 
    } 
} 

private class TakePhotoButtonListener implements View.OnClickListener { 
    @Override 
    public void onClick(View v) { 
     if(hasCamera) { 
      try { 
       Camera camera = Camera.open(); 
       camera.startPreview(); 
       camera.takePicture(
         null, 
         null, 
         new CameraPictureCallbackJPEG()); 
      } catch (Exception e) { 
       Log.i("Error", e.getMessage()); 
      } 
     } 
    } 
} 

确实检测到丹(hasCamera == TRUE)。

我没有使用Camera2(从API 21开始),因为我希望我的应用程序能够在API 15以上工作。

我在这里尝试了很多答案,但没有任何工作。请指教!

+0

http://stackoverflow.com/questions/23904459/android-java-lang-runtimeexception-fail-to-connect-to-camera-service –

+0

权限问题? – GhostCat

+0

尝试重新启动设备。当一些应用程序获得相机并且没有发布它时,我通常会看到这一点。 – CommonsWare

回答

1

如果未添加,请将以下权限添加到您的Manifest文件中。

<uses-permission android:name="android.permission.CAMERA"/> 
<uses-feature android:name="android.hardware.camera" /> 

重要提示: 发生这种情况,因为你已经在第一次启动打开摄像头之后,你还没有释放它的资源。 确保你应该这样做

camera.stopPreview(); 
camera.release(); 
camera = null; 

你要做的打扫卫生的过程,当你使用相机完成释放资源。

希望这会有所帮助。