android java lang runtimeexception无法连接到相机服务
我目前正在开发/closures手电筒。 我得到这个错误java.lang.RuntimeException: Fail to connect to camera service
我不知道为什么这个错误发生。 我提到了很多解决scheme,但是我的问题仍然没有解决。 当手电筒打开时,错误不会发生,但当手电筒closures时会发生错误。
我的代码主要代码 。
我的清单许可:
<uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus"/>
尝试这个…
static Camera camera = null;
在上面宣布。
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); }
我有同样的问题,没有答案在这里解决,所以解决后,我join了我的解决方法。 这适用于支持设置每个应用程序权限(自棉花糖,6.0以来)的新的Android版本。 相机的权限可以禁用,应该从应用程序设置启用。 设置 – >应用程序 – > [你的应用程序] – >权限
有关此更多信息: http : //developer.android.com/training/permissions/requesting.html
我也看到这个错误:
java.lang.RuntimeException:无法连接到相机服务
同时尝试使用手电筒应用程序。 事实certificate,我对我的权限有些sl and,并将它们复制到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
确保您的许可和function列表仅包含在清单部分,而不是埋在应用程序部分!
如果您没有为您的应用程序启用相机权限,则可能在Android 6.0中出现此问题。 从Android 6.0开始,您可以处理应用程序的权限天气,您可以授予或不授予应用程序的特定权限。
因此,如果尚未启用settings->apps->your_app->enable camera permission
则需要从settings->apps->your_app->enable camera permission
。
如果您尝试使用不存在的cameraID打开相机,则会收到相同的错误(java.lang.RuntimeException:无法连接到相机服务)
看看你的代码在这个块
camera.setParameters(parameters); camera.stopPreview(); camera.release(); camera = null;
呼叫release()
释放相机供其他应用程序使用。 应用程序应立即在onPause()
释放相机(并在onResume().
重新打开onResume().
在上面的代码发布后立即你把零相机
如果您的操作系统版本是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();
嗨,我希望你正在处理一个types的应用程序或闪光有关的事情,有很多讨论这之前,这里有一些有用的链接和教程,以实现您的需要,请通过他们希望他们可以帮助你
如何在Android中以编程方式打开相机闪光灯?
http://www.androidhive.info/2013/04/android-developing-flashlight-application/
http://www.compiletimeerror.com/2013/08/how-to-turn-onoff-camera-led-flashlight.html#.U4WH5Xbc3o4
http://android.programmerguru.com/android-flashlight-example/
我可以find这个问题的简单答案是我没有要求相机的权限,这就是为什么默认摄像头权限不适用于我的应用程序在棉花糖设备。 我只是在启动相机之前添加了相机的权限检查,一切正常。
尝试使用这一行,当你退出应用程序:
System.exit(0);
我从某处获得了手电筒应用程序的代码。 它使用System.exit(0)
来closures应用程序。 我删除它,知道这不是一个好的做法。 然后我开始接收这些错误。 我尝试了接受的答案的解决scheme,但后来我开始接受一些其他的错误。 所以,而不是解决它们,我只是把这个System.exit(0)
行回来。 而且,它开始正常工作。 我知道这不是一个好方法,但对于一个小手电的应用程序,你可以尝试这个快速的解决scheme。
如果你所有的代码都可以,那么你应该检查是否有任何其他应用程序使用你的相机。 那么你应该closures当前使用你的相机的其他应用程序。
一旦你从相机回来,你需要stopPreview()
和release()
,以便其他应用程序可以访问它。 将“Camera”类设置为静态,并在onPause()
中将其引用为null
。 这解决了我的问题。
试试看:
public class CameraPhotoCapture extends Activity{ static Camera mcamera = null; @Override protected void onPause() { // TODO Auto-generated method stub if (mcamera != null) { mcamera.stopPreview(); mcamera.release(); mcamera = null; Log.d(DEBUG_TAG, "releaseCamera -- done"); } super.onPause(); } @Override protected void onResume() { // TODO Auto-generated method stub if (mcamera != null) { Camera.open(); Log.d(DEBUG_TAG, "openCamera -- done"); } super.onResume(); } }