ZXing条码扫描器在片段中自定义布局

我在Android Studio上按照此页面开发了ZXing条形码连续扫描仪。

我的应用build.gradle包括:

 repositories { mavenCentral() maven { url "https://raw.github.com/embarkmobile/zxing-android-minimal/mvn-repo/maven-repository/" } } dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.android.support:appcompat-v7:23.0.1' compile files('src/main/jniLibs/scanditsdk-android-4.7.5.jar') compile files('src/main/jniLibs/httpclient-4.0.jar') compile 'com.journeyapps:zxing-android-embedded:3.0.3@aar' compile 'com.google.zxing:core:3.2.0' } 

我的Fragment.xml的布局:

      

然后,我的Fragment代码如下所示:

 public class CMCSMOFragment extends Fragment implements View.OnClickListener { private CompoundBarcodeView barcodeView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) { return null; } View v; v = inflater.inflate(R.layout.cmcsmo_layout, container, false); barcodeView = (CompoundBarcodeView) v.findViewById(R.id.barcode_scanner); barcodeView.decodeContinuous(callback); return v; } private BarcodeCallback callback = new BarcodeCallback() { @Override public void barcodeResult(BarcodeResult result) { if (result.getText() != null) { barcodeView.setStatusText(result.getText()); } //Do something with code result } @Override public void possibleResultPoints(List resultPoints) { } }; } 

当我构建我的应用程序时, CompoundBarcodeView只显示带有ZXing文本的黑色视图

在取景器矩形内放置条形码进行扫描。

编辑:

遵循列侬的建议,我曾使用zxing-minimum但它不允许在肖像模式下工作:(。

我该怎么做才能解决这个问题? 谢谢大家的帮助!

这很容易,ZXing的老板说只在onResumeonPause覆盖方法中添加以下代码:

 @Override public void onResume() { barcodeView.resume(); super.onResume(); } @Override public void onPause() { barcodeView.pause(); super.onPause(); } 

尝试使用zxing的最小库,如下面的链接: https : //github.com/andreipro/zxing-android-minimal

这很容易。 您只需将这些行添加到您的gradle

 repositories { mavenCentral() maven { url "https://raw.github.com/embarkmobile/zxing-android-minimal/mvn-repo/maven-repository/" } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:support-v13:22.2.0' // Zxing minimal libraries compile 'com.embarkmobile:zxing-android-minimal:2.0.0@aar' compile 'com.embarkmobile:zxing-android-integration:2.0.0@aar' compile 'com.google.zxing:core:3.0.1' } 

然后用这个调用条形码

 new IntentIntegrator(this).initiateScan(); // `this` is the current Activity 

在您的情况下,您想要使用自定义布局,因此您必须按照一些参数创建自定义布局,例如下面的布局:

 < ?xml version="1.0" encoding="utf-8"?>                                            

之后,您可以将上面的布局设置为integrator类的

 IntentIntegrator integrator = new IntentIntegrator(this); integrator.setCaptureLayout(R.layout.custom_layout); integrator.initiateScan(); 

但请记住,您必须遵循这些参数。 这意味着您必须为所有视图使用相同的名称。

您必须初始化barcodeView。

试试这段代码:

 IntentIntegrator integrator = IntentIntegrator.forSupportFragment(this); barcodeView.initializeFromIntent(integrator.createScanIntent()); 

https://github.com/journeyapps/zxing-android-embedded

您的应用是否有权使用设备相机? 在清单中添加该权限,然后在安装应用后,转到手机设置>应用>您的应用>权限。 然后授予相机权限

我有同样的问题(黑屏,即屏幕上没有摄像头输出)。 这是因为你没有权限。 我通过征求许可解决了这个问题,请参阅https://developer.android.com/training/permissions/requesting 。

我使用了https://github.com/dlazaro66/QRCodeReaderView,David Lazaro的代码,这是对Zxing库的修改。