android java lang runtimeexception无法连接到摄像头服务

Jig*_*ekh 51 android android-camera flashlight

我目前正致力于手电筒开/关.我收到此错误java.lang.RuntimeException: Fail to connect to camera service我不知道为什么会发生此错误.我提到了许多解决方案,但我的问题仍未解决.当手电筒打开时,不会发生错误,但是当手电筒关闭时则会发生错误.

我的代码主要代码.

我的清单许可:

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus"/>
Run Code Online (Sandbox Code Playgroud)

sam*_*sam 91

我有同样的问题,这里的答案都没有解决,所以在解决之后我就加入了解决问题的方法.这适用于支持每个应用程序设置权限的新Android版本(自Marshmallow,6.0以来).可以禁用相机权限,应从应用程序设置启用.设置 - >应用程序 - > [您的应用程序] - >权限

有关这方面的更多信息:http://developer.android.com/training/permissions/requesting.html

  • 别客气!从Marshmallow开始,您必须明确地处理在您的应用中要求所需的权限(并非所有权限,只有被分类为'危险'和相机权限的权限才是其中之一.有关请求权限的更多信息,请访问:http:// developer.android.com/training/permissions/requesting.html (2认同)

Jim*_*eas 25

我也看到了这个错误:

java.lang.RuntimeException:无法连接到摄像头服务

在尝试手电筒应用程序时.事实证明,我对我的权限有点草率,并将它们复制到manifest.xml文件中的应用程序块的主体中​​.因此,您真的需要遵守以下文档中所述的语法:

http://developer.android.com/guide/topics/manifest/manifest-element.html

否则,应用程序将失败,并且Camera.open()调用上的服务连接失败.它应该基于您在问题中的权限看起来像这样:

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

<application
Run Code Online (Sandbox Code Playgroud)

确保您的权限和功能列表仅包含在清单部分中,而不是隐藏在应用程序部分中!


Jay*_*yas 15

试试这个...

 static Camera camera = null;
Run Code Online (Sandbox Code Playgroud)

宣布它在顶部.

 try{ 
   if(clickOn == true) {
       clickOn = false;
       camera = Camera.open();
       Parameters parameters = camera.getParameters();
       parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
       camera.setParameters(parameters);
       camera.startPreview();

       remoteViews.setViewVisibility(R.id.button1, View.GONE);
       remoteViews.setViewVisibility(R.id.button2, View.VISIBLE);
       localAppWidgetManager.updateAppWidget(componentName, remoteViews);
   } else {
       clickOn = true;
       camera.stopPreview();
       camera.release();
       camera = null;

       remoteViews.setViewVisibility(R.id.button1, View.VISIBLE);
       remoteViews.setViewVisibility(R.id.button2, View.GONE);
       localAppWidgetManager.updateAppWidget(componentName, remoteViews);
   }    
} catch(Exception e) {
   Log.e("Error", ""+e);
}
Run Code Online (Sandbox Code Playgroud)

  • 别忘了发布相机camera.release(); (8认同)
  • 为什么相机静止? (3认同)
  • 静电为什么?你在应用程序中需要多少个camaras? (2认同)

0xA*_*iHn 13

如果您没有为您的应用启用相机权限,则可能会在Android 6.0中出现此问题.从Android 6.0开始,您可以处理您将提供的应用程序权限天气,或者不处理应用程序的特定权限.

因此,settings->apps->your_app->enable camera permission如果尚未启用权限,则需要启用权限.


Moh*_*bil 7

如果你的操作系统版本是6.0或更高版本试试这个,希望这会有所帮助.

public class RequestUserPermission {

private Activity activity;
// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE,
        Manifest.permission.CAMERA
};

public RequestUserPermission(Activity activity) {
    this.activity = activity;
}

public  void verifyStoragePermissions() {
    // Check if we have write permission
    int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);

    if (permission != PackageManager.PERMISSION_GRANTED) {
        // We don't have permission so prompt the user
        ActivityCompat.requestPermissions(
                activity,
                PERMISSIONS_STORAGE,
                REQUEST_EXTERNAL_STORAGE
        );
    }
}
}


**//CALL FROM YOUR ACTIVITY**
 RequestUserPermission requestUserPermission = new RequestUserPermission(this);
    requestUserPermission.verifyStoragePermissions();
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您尝试使用不存在的cameraID打开相机,您将收到相同的错误(java.lang.RuntimeException:无法连接到相机服务)

看看你的代码在这个块

camera.setParameters(parameters);
camera.stopPreview();
camera.release();
camera = null;
Run Code Online (Sandbox Code Playgroud)

调用release()以释放相机以供其他应用程序使用。应用程序应立即释放相机onPause()(并在以下位置重新打开())onResume().

在上面的代码中,发布后立即将 null 放入相机