在Zxing条码应用程序中获取相机错误

我正在尝试使用Zxing Library开发条码扫描器

我的活动如下:

public class Scanner extends Activity { private static final String PACKAGE = "com.test.scan"; private static final String SCANNER = "com.google.zxing.client.android.SCAN"; private static final String SCAN_FORMATS = "UPC_A,UPC_E,EAN_8,EAN_13,CODE_39,CODE_93,CODE_128"; private static final String SCAN_MODE = "QR_CODE_MODE"; public static final int REQUEST_CODE = 1; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); Button ok; ok = (Button) findViewById(R.id.b1); ok.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { Intent scanIntent = new Intent(SCANNER); scanIntent.setPackage(PACKAGE); scanIntent.addCategory(Intent.CATEGORY_DEFAULT); scanIntent.putExtra("SCAN_FORMATS", SCAN_FORMATS); scanIntent.putExtra("SCAN_MODE", SCAN_MODE); try { startActivityForResult(scanIntent, REQUEST_CODE); } catch (ActivityNotFoundException e) { // TODO: Exception handling } } }); } 

也清单文件:

  <activity android:name=".Scanner" android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:windowSoftInputMode="stateAlwaysHidden"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.google.zxing.client.android.CaptureActivity" android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" android:windowSoftInputMode="stateAlwaysHidden"> <intent-filter> <action android:name="com.google.zxing.client.android.SCAN" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="com.google.zxing.client.android.PreferencesActivity" android:label="@string/preferences_name"> </activity> <activity android:name="com.google.zxing.client.android.HelpActivity" android:screenOrientation="user"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name="com.google.zxing.client.android.share.ShareActivity" android:label="@string/share_name" android:screenOrientation="user" android:theme="@android:style/Theme.Light"> <intent-filter> <action android:name="com.google.zxing.client.android.SHARE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <uses-permission android:name="android.permission.CAMERA" 

但是我收到以下错误:

“对不起,Android相机遇到问题,您可能需要重新启动设备”。

我跟着几个博客。

日志:

  Unexpected error initializating camera 01-27 10:40:48.281: WARN/CaptureActivity(1007): java.lang.RuntimeException: Fail to connect to camera service 01-27 10:40:48.281: WARN/CaptureActivity(1007): at android.hardware.Camera.native_setup(Native Method) 01-27 10:40:48.281: WARN/CaptureActivity(1007): at android.hardware.Camera.<init>(Camera.java:185) 01-27 10:40:48.281: WARN/CaptureActivity(1007): at android.hardware.Camera.open(Camera.java:165) 01-27 10:40:48.281: WARN/CaptureActivity(1007): at com.google.zxing.client.android.camera.CameraManager.openDriver(CameraManager.java:126) 01-27 10:40:48.281: WARN/CaptureActivity(1007): at com.google.zxing.client.android.CaptureActivity.initCamera(CaptureActivity.java:606) 01-27 10:40:48.281: WARN/CaptureActivity(1007): at com.google.zxing.client.android.CaptureActivity.surfaceCreated(CaptureActivity.java:346) 01-27 10:40:48.281: WARN/CaptureActivity(1007): at android.view.SurfaceView.updateWindow(SurfaceView.java:532) 01-27 10:40:48.281: WARN/CaptureActivity(1007): at android.view.SurfaceView.dispatchDraw(SurfaceView.java:339) 

Solutions Collecting From Web of "在Zxing条码应用程序中获取相机错误"

这意味着设备从Camera.open()返回null ,它不应该这样做。 它被视为设备错误。 我不知道如何debugging它为什么这样做,但这是原因。

我唯一一次看到这种情况一直发生在只有前置摄像头的Android 2.2设备上。 用于访问前置摄像头的API仅出现在Android 2.3中,前一个Camera.open() API方法只能返回后置摄像头。 所以这些返回null 。 这真是一个设备错误,因为他们确实需要运行Android 2.3才能让应用使用前置摄像头。

对于Android 6+,由于“权限”问题,如果您收到消息“对不起,相机遇到问题,您可能需要重新启动设备”,进入设置 – 应用程序 – find“您的应用程序名称” – select权限并打开“相机”。

相机的许可

 <uses-permission android:name="android.permission.CAMERA" 

不在适当的地方。 它应该在应用程序标签之后。

我面临类似的问题。 在Android M上进行testing时,相机需要运行时权限 。 添加此答案仅供参考,以帮助陷入类似情况的任何人。

您可能有设备pipe理员禁止访问相机。 应该检查如果Android相机应用程序可以启动,或者如果它抱怨设备pipe理员。

我得到了同样的问题修正了它

 SurfaceHolder surfaceHolder = surfaceView.getHolder(); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

注意:这个代码以前的工作似乎是操作系统(V3.0以前的版本)最近出现的一个问题。

我能够通过简单地将相机权限放在主应用程序中来排除问题。

如果你是在Android模拟器中调用相机的Android 2.2,它会发生exception。 虽然它在设备上运行良好。

看看你的代码,我想你的代码试图多次打开相机。 下载谷歌zxing条码扫描器源代码,然后尝试。

这是有用的https://github.com/zxing/zxing/wiki/Scanning-Via-Intent (原来托pipe在Google Code上,现在在GitHub上)