每次“Camera camera = Camera.open();”时,Android都会抛出错误叫做

Posted

技术标签:

【中文标题】每次“Camera camera = Camera.open();”时,Android都会抛出错误叫做【英文标题】:Android throws error everytime when "Camera camera = Camera.open();" is called 【发布时间】:2017-10-01 06:29:17 【问题描述】:

我在 android 中使用相机时遇到问题。

在 API 25 Nougat 7.1.1 SDK 上进行开发。最小目标 SDK 设置为 15。

每次调用都会报错:

Camera camera = Camera.open();

出现错误“RuntimeException: Fail to connect to camera service”,可以从我的模拟器中看到(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 及以上版本上运行。

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

【问题讨论】:

***.com/questions/23904459/… 权限问题? 尝试重启设备。我通常会在某些应用获取相机但没有释放它时看到这种情况。 您能否发布错误的堆栈跟踪信息,以帮助您更好地找出问题的解决方案。 android java lang runtimeexception fail to connect to camera service的可能重复 【参考方案1】:

如果未添加以下权限,请在您的清单文件中添加这些权限。

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

重要提示: 发生这种情况是因为您在首次启动时打开了相机,之后您还没有释放它的资源。 确保你应该这样做

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

当你使用完相机后,你必须做上述清理和释放资源的过程。

希望这会有所帮助。

【讨论】:

以上是关于每次“Camera camera = Camera.open();”时,Android都会抛出错误叫做的主要内容,如果未能解决你的问题,请参考以下文章

Android Camera2画面黑屏,录像仅1秒

MTK android 工程中如何修改照片详细信息中机型名

每次开机都要重新连接无线网

为啥,每次打开EXcel都会这个窗口,所以导致每次都要开两次才行!

【急!】每次刚打开MyEclipse时都会出现问题 导致无法使用【在线等答案】

在每次迭代中重新声明变量是不是比在每次迭代后重置它们更快?