图书馆条形码扫描器 ZXing 显示黑屏

5
我正在使用ZXing的条形码扫描库。在我测试的所有设备上都可以正常工作,除了运行Android 6的Nexus 5。启动该活动时,只会显示黑屏,什么也看不到。因此,我认为可能存在兼容性问题,并下载了ZXing发布的官方条形码应用程序。但是,在那个Nexus 5上它能够正常工作。
所以实际上,我有些烦恼,可能是我做错了什么...
在Android Monitor中,我收到以下消息:

android an error occurred while connecting to camera 0

我已经搜索了这个状态消息,但没有找到对我有用的内容。
有人有解决这个问题的建议吗?或者有什么提示可以识别出问题的原因吗?

你的应用程序是否请求了适当的权限? - Stephanvs
是的,它需要以下权限:<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.CAMERA" />。而且这段代码在其他设备上运行良好(那些使用Android 4-5的设备)。也许这与Android 6有些共同之处? - jublikon
4
这种情况我之前遇到过几次。你需要手动为你的应用程序授予相机权限(进入设置->应用程序)。有时候,尤其是当我手动卸载该应用程序,然后从Android Studio安装它时,它会不知何故失去权限。 - Grzegorz Kapusta
你节省了我很多时间!谢谢。 - jublikon
我有同样的“问题”。 您可以在OnResume中请求M权限,并在处理响应时初始化ZXing库。 还注意到,如果用户不允许应用程序使用相机并且完成活动时,必须检查stopCamera方法。 - msamardzic
遇到了同样的问题,实际上需要重新启动设备,然后它就可以正常工作了(之前是可以工作的)。 - jobbert
2个回答

1

Android 6 不接受 Manifest 文件中的权限,您需要在运行时请求权限。类似这样:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M &&
                        getActivity().checkSelfPermission(Manifest.permission.CAMERA)
                                != PackageManager.PERMISSION_GRANTED) {
                    requestPermissions(new String[]{Manifest.permission.CAMERA},
                            PERMISSIONS_REQUEST_ACCESS_CAMERA);
                } else {
                    mScannerView.startCamera();
                }

然后覆盖onRequestPermissionResult方法:

@Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        if (requestCode == PERMISSIONS_REQUEST_ACCESS_CAMERA) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                mScannerView.startCamera();
            }
        }
    }

希望这有所帮助 :)

-2

我在 Nexus 5X 上的 Android 6 上遇到了同样的问题。解决方法是添加手电筒权限。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接