分享一下华为的二维码条形码识别(Android)

Posted 清风伴佳人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分享一下华为的二维码条形码识别(Android)相关的知识,希望对你有一定的参考价值。

分享一下华为的二维码\\条形码识别(android

效果的的话,如下视频

华为的scan二维码和条形码扫描

这是demo的效果,但是我们要的是导入自己的的项目,并且获得自己想要的结果。

先看怎么导入吧


    implementation 'com.huawei.hms:scanplus:1.1.1.301'

然后从demo里把ScaningActivity 粘到自己的项目中,并且在manifest注册

使用呢就比较简单了
首先要获取权限
相机还有存储权限 这个很重要 不然扫描的框和条显示不出来。
然后获取完权限之后,启动ScaningActivity

private val REQUEST_CODE_SCAN_ONE = 0X01
ScanUtil.startScan(this, REQUEST_CODE_SCAN_ONE, HmsScanAnalyzerOptions.Creator().create())

然后设置数据回调

 /**
     * 扫码回调
     */
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) 
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode != AppCompatActivity.RESULT_OK || data == null) 
            return
        
        if (requestCode == REQUEST_CODE_SCAN_ONE) 
            val obj: HmsScan = data.getParcelableExtra(ScanUtil.RESULT)
            if (obj != null) 
                Log.e("测试打印结果", obj.getOriginalValue())
            
        

    

这个样子就基本上把功能实现了,但是需要在注意一点。不要再在fragment里面启动,不然你在fragment里接收不到消息。

但是demo里也给出了其他的样式

  //Default View Mode
        if (requestCode == CAMERA_REQ_CODE) 
            ScanUtil.startScan(this, REQUEST_CODE_SCAN_ONE, new HmsScanAnalyzerOptions.Creator().create());
        
        //Customized View Mode
        if (requestCode == DEFINED_CODE) 
            Intent intent = new Intent(this, DefinedActivity.class);
            this.startActivityForResult(intent, REQUEST_CODE_DEFINE);
        
        //Bitmap Mode
        if (requestCode == BITMAP_CODE) 
            Intent intent = new Intent(this, CommonActivity.class);
            intent.putExtra(DECODE_MODE, BITMAP_CODE);
            this.startActivityForResult(intent, REQUEST_CODE_SCAN_MULTI);
        
        //Multiprocessor Synchronous Mode
        if (requestCode == MULTIPROCESSOR_SYN_CODE) 
            Intent intent = new Intent(this, CommonActivity.class);
            intent.putExtra(DECODE_MODE, MULTIPROCESSOR_SYN_CODE);
            this.startActivityForResult(intent, REQUEST_CODE_SCAN_MULTI);
        
        //Multiprocessor Asynchronous Mode
        if (requestCode == MULTIPROCESSOR_ASYN_CODE) 
            Intent intent = new Intent(this, CommonActivity.class);
            intent.putExtra(DECODE_MODE, MULTIPROCESSOR_ASYN_CODE);
            this.startActivityForResult(intent, REQUEST_CODE_SCAN_MULTI);
        

但是注意因为每个样式的请求码不一样,所以回调也肯定不一样

  @RequiresApi(api = Build.VERSION_CODES.N)
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode != RESULT_OK || data == null) 
            return;
        
        //Default View
        if (requestCode == REQUEST_CODE_SCAN_ONE) 
            HmsScan obj = data.getParcelableExtra(ScanUtil.RESULT);
            if (obj != null) 
                Intent intent = new Intent(this, DisPlayActivity.class);
                intent.putExtra(RESULT, obj);
                startActivity(intent);
            
            //MultiProcessor & Bitmap
         else if (requestCode == REQUEST_CODE_SCAN_MULTI) 
            Parcelable[] obj = data.getParcelableArrayExtra(CommonActivity.SCAN_RESULT);
                if (obj != null && obj.length > 0) 
                    //Get one result.
                    if (obj.length == 1) 
                        if (obj[0] != null && !TextUtils.isEmpty(((HmsScan) obj[0]).getOriginalValue())) 
                            Intent intent = new Intent(this, DisPlayActivity.class);
                            intent.putExtra(RESULT, obj[0]);
                            startActivity(intent);
                        
                     else 
                        Intent intent = new Intent(this, DisPlayMulActivity.class);
                        intent.putExtra(RESULT, obj);
                        startActivity(intent);
                    
                
            //Customized View
         else if (requestCode == REQUEST_CODE_DEFINE) 
            HmsScan obj = data.getParcelableExtra(DefinedActivity.SCAN_RESULT);
            if (obj != null) 
                Intent intent = new Intent(this, DisPlayActivity.class);
                intent.putExtra(RESULT, obj);
                startActivity(intent);
            
        
    

最好说一下,demo是Java写的 ,本人给出的示例代码是kotlin写的。

以上是关于分享一下华为的二维码条形码识别(Android)的主要内容,如果未能解决你的问题,请参考以下文章

zbar 扫描快,zxing 可以生成和识别本地,So,我就把他们结合在了一起,这样 Android 二维码(条形码)功能就更便捷了

Python zxing 库解析(条形码二维码识别)

Android扫描二维码(基于华为HMS Core)

QRCode 扫描二维码扫描条形码相册获取图片后识别生成带 Logo 二维码支持微博微信 QQ 二维码扫描样式

java生成矢量条形码二维码

用OpenCV和Python识别二维码与条形码