Android M QR读取错误..打开相机时出错

Android M QRread error.. Error at opening camera

我关注this阅读二维码..

在这里,我已经将它集成到我的应用程序中,几天以来它运行良好..

它在 android 2 到 5.1 版本上工作正常 直到 Api 22 它正常工作....

但现在 android 6 Api 23 个或更多....

我收到这个错误..

java.lang.RuntimeException: Fail to connect to camera service
at android.hardware.Camera.<init>(Camera.java:511)
at android.hardware.Camera.open(Camera.java:353)
at com.google.zxing.client.android.camera.open.GingerbreadOpenCameraInterface.open(GingerbreadOpenCameraInterface.java:57)
at com.google.zxing.client.android.camera.open.CameraManager.openDriver(CameraManager.java:77)
at com.my.qr.sdata.QRCodeReaderView.surfaceCreated(QRCodeReaderView.java:82)
at android.view.SurfaceView.updateWindow(SurfaceView.java:582)
at android.view.SurfaceView.onPreDraw(SurfaceView.java:177)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2067)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1119)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6060)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
at android.os.Handler.handleCallback(Handler.java:746)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)

任何人都可以在 android 6 帮助我吗...这在 android 5 和 5.1 以及 android 2.3.3 中也工作正常..

更新

现在我知道我需要在 android 6 或更高版本中添加权限..

任何人都可以建议我应该在哪里添加或更改上面错误的代码..

this是我的代表码

https://github.com/dlazaro66/QRCodeReaderView/blob/master/QRCodeReaderView-lib/qrcodereaderview/src/main/java/com/dlazaro66/qrcodereaderview/QRCodeReaderView.java

请向我推荐 android 6 和新版本中等待 android 权限的大多数用户...

检查你的 sdk 版本,如果它是 23,那么你必须获得权限运行时间

您需要检查您的 API LEVEL >= 23。如果是这种情况(如 Android 6),您必须在运行时请求访问相机的权限。清单权限将不起作用。

阅读 this 了解如何实现此功能。

try : 写入你的 gradle.build targetSdkVersion 22 查看: < 使用权限 android:name="android.permission.CAMERA"/>

我添加了运行时间权限...

像这样:

在 运行 时间...我在创建时添加了这个...

if (CheckPermission(this, Manifest.permission.Camera)) {
            YourStuffHandling();
        } else {
            RequestPermission(MainActivity.this, Manifest.permission.Camera, REQUEST_READ_PERMISSION );
        }

在这里我的应用程序将处理..(QRcode..)

private void YourStuffHandling() {
}

并以此回应..

@Override
        public void onRequestPermissionsResult(int permsRequestCode, String[] permissions, int[] grantResults) {

            switch (permsRequestCode) {

                case REQUEST_READ_PERMISSION: {
                    if (grantResults.length > 0
                            && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        YourStuffHandling();
                    } else {
                        ShowToast(getString(R.string.permission_needed_sms));
                    }
                    return;
                }
            }
        }

        public void RequestPermission(Activity thisActivity, String Permission, int Code) {
            if (ContextCompat.checkSelfPermission(thisActivity,
                    Permission)
                    != PackageManager.PERMISSION_GRANTED) {
                if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
                        Permission)) {
                } else {
                    ActivityCompat.requestPermissions(thisActivity,
                            new String[]{Permission},
                            Code);
                }
            }
        }

        public boolean CheckPermission(Context context, String Permission) {
            if (ContextCompat.checkSelfPermission(context,
                    Permission) == PackageManager.PERMISSION_GRANTED) {
                return true;
            } else {
                return false;
            }
        }

现在它对我来说工作正常,...我已经为所有其他权限添加了相同的....在运行时间...