我打印出销售摘要并且有QR码, 我想开发一个应用程序(IOS和android)来读取QR码,提取所有信息,做一些计算,并以特定的形式显示,我尝试了zxing库,但它没有从收据中提取所有信息。任何提示?< / p>
答案 0 :(得分:0)
This library是您在Android应用中阅读QR码最受欢迎和最简单的方法
您还应该查看此库的Wiki部分,了解如何将此库集成到Android应用程序以及如何使用此库。
这就是你如何使用这个库
1.将以下行添加到您的dependencies
内 build.gradle(模块:应用)文件中,将此库添加到您的项目中
compile 'com.github.nisrulz:qreader:2.0.0'
2.然后,在同步项目文件后,将此库提供的SurfaceView
元素添加到 XML 布局文件中。
<SurfaceView
android:id="@+id/camera_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
3.声明SurfaceView
&amp;您的活动 Java 文件中的QREader
&amp;然后在onCreate()
方法中初始化它。
class MainActivity extends AppCompatActivity{
private SurfaceView mySurfaceView;
private QREader qrEader;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Setup SurfaceView
// -----------------
mySurfaceView = (SurfaceView) findViewById(R.id.camera_view);
// Init QREader
// ------------
qrEader = new QREader.Builder(this, mySurfaceView, new QRDataListener() {
@Override
public void onDetected(final String data) {
Log.d("QREader", "Value : " + data);
text.post(new Runnable() {
@Override
public void run() {
text.setText(data);
}
});
}
}).facing(QREader.BACK_CAM)
.enableAutofocus(true)
.height(mySurfaceView.getHeight())
.width(mySurfaceView.getWidth())
.build();
}
4.在onResume()
@Override
protected void onResume() {
super.onResume();
// Init and Start with SurfaceView
// -------------------------------
qrEader.initAndStart(mySurfaceView);
}
您可以使用此库进行更多可能性,因此我建议您访问GitHub
存储库并查看它。值得一试!
答案 1 :(得分:0)
您可以使用google vision API来实现此目的。我个人用过这个,觉得很棒。以下代码片段可以为您提供帮助。
将以下内容放入gradle中。
compile 'com.google.android.gms:play-services:9.4.0'
使用BarcodeDetector
和CameraSource
类实时捕获QR码并对其进行解码。
barcodeDetector.setProcessor(new Detector.Processor<Barcode>() {
@Override
public void release() {
}
@Override
public void receiveDetections(Detector.Detections<Barcode> detections) {
final SparseArray<Barcode> barcodes = detections.getDetectedItems();
if (barcodes.size() != 0) {
barcodeInfo.post(new Runnable() { // Use the post method of the TextView
public void run() {
barcodeInfo.setText( // Update the TextView
barcodes.valueAt(0).displayValue
);
}
});
}
}
});
使用SparseArray获取检测结果,此稀疏数组的displayValue
元素返回deocded字符串。
提取字符串后,可以执行任何操作,无论是显示字符串还是从中进行计算等。