android - ZXingScannerView Android 6 相机权限

标签 android android-camera android-6.0-marshmallow zbar

我在我的 Fragment 中使用 ZXingScannerView 作为二维码阅读器
现在,我无法让相机在新的 Android 6 权限下正常工作。

低于 API 23 一切正常。

在我的 onCreateView 方法中,我检查是否授予了相机权限,否则会请求它。出现对话框,我可以授予权限。

但在我更改设备方向之前,相机预览保持黑色。

这是我的代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle state){

    mScannerView = new ZXingScannerView(getActivity());

    if (ActivityCompat.checkSelfPermission(getMainActivity(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
        requestPermissions(new String[]{Manifest.permission.CAMERA}, PERMISSION_REQUEST_CAMERA_SCAN_QR);
    } else {
        if(state != null) {
            mFlash = state.getBoolean(FLASH_STATE, false);
            mAutoFocus = state.getBoolean(AUTO_FOCUS_STATE, true);
            mSelectedIndices = state.getIntegerArrayList(SELECTED_FORMATS);
            mCameraId = state.getInt(CAMERA_ID, -1);
        } else {
            mFlash = false;
            mAutoFocus = true;
            mSelectedIndices = null;
            mCameraId = -1;
        }
    }

    return mScannerView;
}


@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    if (requestCode == PERMISSION_REQUEST_CAMERA_SCAN_QR && hasPermission(grantResults)) {
        Logger.logInfo("permission granted");
        mScannerView.setResultHandler(this);
        mScannerView.startCamera(mCameraId);
        mScannerView.setFlash(mFlash);
        mScannerView.setAutoFocus(mAutoFocus);
    }
}

private boolean hasPermission(int[] grantResults) {
    return grantResults.length > 0 && grantResults[0] == PERMISSION_REQUEST_CAMERA_SCAN_QR;
}


@Override
public void onResume() {
    super.onResume();
    mScannerView.setResultHandler(this);
    mScannerView.startCamera(mCameraId);
    mScannerView.setFlash(mFlash);
    mScannerView.setAutoFocus(mAutoFocus);

}

最佳答案

我猜你应该在初始化 ZXingScannerView 之前请求许可。尽管如此,我还是建议让家长 Activity 请求许可。因此,当您拥有正确的权限时,只需启动 ScanSomethingActivity 即可。

此外,如果获得许可,这个库可能会让您的生活更轻松:

https://github.com/googlesamples/easypermissions

关于android - ZXingScannerView Android 6 相机权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34267692/

相关文章:

Android 6.0+ java.io.FileNotFoundException : (Permission denied)

android - 仅限 API 23 以下的相机权限

java - 添加基于用户输入 EditText 的循环日历事件

java - 从共享首选项将数组传递到 ArrayAdapter。安卓

android - 在 Zxing 条码应用程序中出现相机错误

android - 在 android 中设置显示方向后,相机相机预览不正确

java - onClick 方法无法捕获未保存到图库的图像和文件

android - 未更新的应用程序执行的代码需要用户在 Android 6.0 Marshmallow 中不允许的权限时会发生什么

android - 无法将某些红外遥控键代码传递给 Android

android - 发送 Intent 到 Home 和 Widget Add