【问题标题】:An error occurred while connecting to camera in android在android中连接相机时出错
【发布时间】:2015-02-24 15:28:37
【问题描述】:

在 android 应用程序中集成 zxing 库期间,一切正常,但是当我尝试反复调用相机时,相机会遇到这个问题 这是我的日志

    02-24 20:49:34.775: W/CameraBase(15622): An error occurred while connecting to camera: 0
02-24 20:49:34.785: W/CaptureActivity(15622): Unexpected error initializing camera
02-24 20:49:34.785: W/CaptureActivity(15622): java.lang.RuntimeException: Fail to connect to camera service
02-24 20:49:34.785: W/CaptureActivity(15622):   at android.hardware.Camera.<init>(Camera.java:545)
02-24 20:49:34.785: W/CaptureActivity(15622):   at android.hardware.Camera.open(Camera.java:385)
02-24 20:49:34.785: W/CaptureActivity(15622):   at com.google.zxing.client.android.camera.open.OpenCameraInterface.open(OpenCameraInterface.java:53)
02-24 20:49:34.785: W/CaptureActivity(15622):   at com.google.zxing.client.android.camera.CameraManager.openDriver(CameraManager.java:80)
02-24 20:49:34.785: W/CaptureActivity(15622):   at com.google.zxing.client.android.CaptureActivity.initCamera(CaptureActivity.java:652)
02-24 20:49:34.785: W/CaptureActivity(15622):   at com.google.zxing.client.android.CaptureActivity.surfaceCreated(CaptureActivity.java:370)
02-24 20:49:34.785: W/CaptureActivity(15622):   at android.view.SurfaceView.updateWindow(SurfaceView.java:607)
02-24 20:49:34.785: W/CaptureActivity(15622):   at android.view.SurfaceView$3.onPreDraw(SurfaceView.java:184)
02-24 20:49:34.785: W/CaptureActivity(15622):   at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:921)
02-24 20:49:34.785: W/CaptureActivity(15622):   at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2169)
02-24 20:49:34.785: W/CaptureActivity(15622):   at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1196)
02-24 20:49:34.785: W/CaptureActivity(15622):   at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6675)
02-24 20:49:34.785: W/CaptureActivity(15622):   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:777)
02-24 20:49:34.785: W/CaptureActivity(15622):   at android.view.Choreographer.doCallbacks(Choreographer.java:590)
02-24 20:49:34.785: W/CaptureActivity(15622):   at android.view.Choreographer.doFrame(Choreographer.java:560)
02-24 20:49:34.785: W/CaptureActivity(15622):   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:763)
02-24 20:49:34.785: W/CaptureActivity(15622):   at android.os.Handler.handleCallback(Handler.java:739)
02-24 20:49:34.785: W/CaptureActivity(15622):   at android.os.Handler.dispatchMessage(Handler.java:95)
02-24 20:49:34.785: W/CaptureActivity(15622):   at android.os.Looper.loop(Looper.java:145)
02-24 20:49:34.785: W/CaptureActivity(15622):   at android.app.ActivityThread.main(ActivityThread.java:5944)
02-24 20:49:34.785: W/CaptureActivity(15622):   at java.lang.reflect.Method.invoke(Native Method)
02-24 20:49:34.785: W/CaptureActivity(15622):   at java.lang.reflect.Method.invoke(Method.java:372)
02-24 20:49:34.785: W/CaptureActivity(15622):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1388)
02-24 20:49:34.785: W/CaptureActivity(15622):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1183)

这是集成zxing库的代码,请查看

    @Override
    public void onScanClicked(int position) {
        barCodePosition = position;
        Intent intent = new Intent("com.google.zxing.client.android.SCAN");
        intent.putExtra("SCAN_MODE", "SCAN_MODE");
        startActivityForResult(intent, 123);
    }
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // We came from the scanning activity; the return intent contains a
        // RESULT_EXTRA key
        // whose value is an ArrayList of BarcodeResult objects that we found
        // while scanning.
        // Get the list of objects and add them to our list view.
        System.out
                .println(requestCode + "DDDDDDDDDDDDDDDDDDDDDDD" + resultCode);
        switch (requestCode) {

        case SCAN_CODE:

            if (resultCode == RESULT_OK) {

                ArrayList<BarcodeResult> barcodes = data
                        .getParcelableArrayListExtra(BarcodeScanActivity.RESULT_EXTRA);
                if (barcodes != null && barcodes.size() > 0) {
                    BarcodeResult barCodeResult = barcodes.get(0);
                    String barCodeNumber = barCodeResult.barcodeString;
                    Toast.makeText(getApplicationContext(), barCodeNumber,
                            Toast.LENGTH_LONG).show();
                    scanAdapter.addBarcodes(barCodeNumber, barCodePosition);

                }
            }

            break;

        case SCANNER_REQ_CODE:

            if (resultCode == RESULT_OK) {
                String contents = data.getStringExtra("SCAN_RESULT");
                System.out.println(contents
                        + "TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT");
                scanAdapter.addBarcodes(contents, barCodePosition);

            }

            break;

        case gps_code:
            switch (resultCode) {
            case Activity.RESULT_OK:
                Bundle bund = data.getExtras();
                outletLatitude = bund.getString("LATITUDE");
                outletLongitude = bund.getString("LONGITUDE");
                diag = ProgressDialog.show(this, "Please wait",
                        "saving data...");
                thd = new Thread(StockCountActivity.this);
                thd.start();
                break;

            default:
            }
        case product_code:
            switch (resultCode) {
            case Activity.RESULT_OK:
                Bundle bund = data.getExtras();
                // purchaseVolume.setText(bund.getString("SALES_VOLUME"));
                // purchaseValue.setText(bund.getString("SALES_VALUE"));
                // salesDetails = bund.getString("SALES_DETAILS");
                break;
            case Activity.RESULT_CANCELED:
                break;
            default:
            }

        }
    }

【问题讨论】:

  • 你的问题解决了吗?

标签: android-camera zxing


【解决方案1】:

在AndroidManifest.xml中添加权限:

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

【讨论】:

  • 您好,在回答有关 SO 的问题时,请添加有关用户如何完成您的说明的更多信息。感谢您的贡献。
【解决方案2】:

看这里:W/CameraBase﹕ An error occurred while connecting to camera: 0

从 Android 6.0(API 级别 23)开始,用户在应用运行时授予应用权限,而不是在安装应用时。这种方法简化了应用程序安装过程,因为用户在安装或更新应用程序时不需要授予权限。它还使用户可以更好地控制应用程序的功能;例如,用户可以选择让相机应用程序访问相机而不是设备位置。用户可以通过进入应用程序的设置屏幕随时撤销权限。 http://developer.android.com/training/permissions/requesting.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    相关资源
    最近更新 更多