二維碼距離遠、反光、遮擋,怎麼辦?不用擔憂,華爲HMS Scan kit 通通幫您搞定

前言

  前幾天,小編外出shopping完,美滋滋的準備開車回家,結果被車庫的支付二維碼攔住了,距離太遠,一直沒法識別,後面的車主還使勁催促,搞得我很煩躁啊。回家後和朋友吐槽,沒獲得安慰不說,還強行加入了一個關於二維碼反光、遮擋的大型吐槽現場。java

  掃碼功能不是已經使用好久了嗎?怎麼還有這麼多問題?android

  後來無心中在外網上看到一篇關於華爲 HMS Scan kit的介紹,小編順着文章發如今華爲開發者聯盟網站上能夠下載APK體驗,趕忙試了試效果。華爲 HMS Scan kit功能果真強大,輕鬆解決遠距離、反光、損壞、遮擋等複雜掃碼場景。git

效果展現

遠距離掃碼
在這裏插入圖片描述
反光掃碼
在這裏插入圖片描述
損壞、遮擋掃碼
在這裏插入圖片描述github

  小編髮現,華爲HMS Scan kit還能夠實現任意角度掃碼、曲面掃碼、同時識別多個碼等,支持13種全球主流碼,徹底能夠知足生活、工做等各種場景使用需求。json

  你們能夠戳下方連接,親身感覺下:https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Examples-V5/android-sample-code-0000001050734383-V5 瀏覽器

  重點來了,這麼好用、強大的掃碼服務功能,怎麼得到呢? app

  不要着急,小編已經幫你們把開發流程搬過來了,快來集成吧!maven

開發實戰

1 配置AppGallery Connect

  在開發應用前,須要在AppGallery Connect中配置相關信息。包括:ide

    • 註冊成爲開發者。
    • 建立應用。

      這裏就很少介紹了,你們能夠參考官網操做:
    https://developer.huawei.com/consumer/cn/doc/development/AppGallery-connect-Guides/agc-get-started#createproject函數

    2 集成HMS Core SDK

    2.1 添加當前應用的AppGallery Connect配置文件

      若是在AppGallery Connect中開通了相關服務則須要將「agconnect-services.json」文件添加到您的App中。

      一、登陸AppGallery Connect網站,點擊「個人項目」。

      二、在項目列表中找到您的項目,在項目中點擊須要集成HMS Core SDK的應用。

      三、在「項目設置 > 常規」頁面的「應用」區域,點擊「agconnect-services.json」下載配置文件。

      四、將「agconnect-services.json」文件拷貝到應用級根目錄下。
    在這裏插入圖片描述

    2.2 配置HMS Core SDK的Maven倉地址
      一、打開Android Studio項目級「build.gradle」文件。
    在這裏插入圖片描述

      二、添加HUAWEI agcp插件以及Maven代碼庫。

    • 在「allprojects > repositories」中配置HMS Core SDK的Maven倉地址。
    • 在「buildscript > repositories」中配置HMS Core SDK的Maven倉地址。
    • 若是App中添加了「agconnect-services.json」文件則須要在「buildscript > dependencies」中增長agcp配置。
    buildscript {
        repositories {
            google()
            jcenter()
            maven {url 'https://developer.huawei.com/repo/'}
        }
        dependencies {
            ...
            classpath 'com.huawei.agconnect:agcp:1.3.1.300'
        }
    }
      
    allprojects {
        repositories {
            google()
            jcenter()
            maven {url 'https://developer.huawei.com/repo/'}
        }
    }

    說明:Maven倉地址沒法直接在瀏覽器中打開訪問,只能在IDE中配置。如需添加多個Maven代碼庫,請將華爲公司的Maven倉地址配置在最後。
    2.3 添加編譯依賴
    一、打開Android Studio項目級「build.gradle」文件。
    在這裏插入圖片描述

    二、引用SDK。
    華爲Scan Kit提供兩種SDK,普通版和plus版。plus版在非華爲手機上效果好點兒但SDK略大。你們能夠根據需求選擇合適的SDK,版本填寫實際的SDK版本號就能夠了。

    例如,使用Scan Kit SDK,在「dependencies」中添加以下編譯依賴,{version}須要替換爲SDK當前版本:implementation 'com.huawei.hms:scan:1.2.2.300'。

    dependencies{
      implementation 'com.huawei.hms:scan:1.2.2.300'
     }

    三、在文件頭apply plugin: 'com.android.application'下一行添加以下配置。

    **2.4  同步工程**
          在完成以上的配置後,點擊工具欄中的gradle同步圖標,完成「build.gradle」文件的同步,將相關依賴下載到本地。
        ![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20200928162619474.png#pic_center)

    3 添加權限

    一、在調用Scan kit 時,開發者須要先在Manifest中指定相應的權限。
      構建相機掃碼功能,須要申請「CAMERA」(相機權限);構建導入圖片掃碼功能,須要申請「READ_EXTERNAL_STORAGE」(讀文件權限)。

    <!--相機權限-->
    <uses-permission android:name="android.permission.CAMERA" />
    <!--讀文件權限-->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <!--使用特性-->
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />

    二、在Manifest中指定權限後,還須要在代碼中動態申請一下權限。

    //CAMERA_REQ_CODE爲用戶自定義,用於接收權限校驗結果 
    ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA, Manifest.permission.READ_EXTERNAL_STORAGE}, CAMERA_REQ_CODE);

    三、校驗是否開啓相應的權限,決定是否繼續掃碼。

    //實現「onRequestPermissionsResult」函數接收校驗權限結果
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        //判斷「requestCode」是否爲申請權限時設置請求碼CAMERA_REQ_CODE,而後校驗權限開啓狀態
        if (requestCode == CAMERA_REQ_CODE && grantResults.length == 2 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) {
            //調用掃碼接口,構建掃碼能力,需開發者實現
            ...
        }
    }

    4 應用開發

      華爲HMS Scan kit提供Default view mode、Customized view mode、Bitmap mode 、Multi Processor mode 4種調用方式,開發者能夠根據需求構建掃碼功能。

      小編這裏介紹下customized view mode開發過程。
    一、自定義掃碼頁面元素。
    (1)自定義標題
    定義文本信息爲「title」變量。

    <TextView 
        android:layout_marginStart="10sp" 
        android:layout_toEndOf="@+id/back_img" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:gravity="center_vertical" 
        android:text="@string/title" 
        android:textAllCaps="false" 
        android:textColor="#FFFFFF" 
        android:textSize="20sp" 
        android:textStyle="bold" />

    (2)自定義返回按鈕

    定義id爲「back_img」的頁面視圖,並綁定點擊返回操做。

    (3)自定義閃光燈按鈕

    定義閃光燈按鈕的頁面視圖,並綁定開啓關閉操做。

    (4)自定義掃碼界面

    繪製掃碼框。

    <RelativeLayout 
        android:layout_width="match_parent" 
        android:layout_height="match_parent"> 
        <ImageView 
            android:layout_width="match_parent" 
            android:layout_height="match_parent" 
            android:layout_centerInParent="true" 
            android:layout_centerHorizontal="true" 
            android:background="#FF000000" 
            android:alpha="0.1" /> 
        <TextView 
            android:layout_marginTop="225dp" 
            android:layout_centerHorizontal="true" 
            android:text="@string/scan_tip" 
            android:textAllCaps="false" 
            android:textColor="#FFFFFF" 
            android:textSize="15sp" 
            android:textStyle="bold" 
            android:layout_height="20dp" 
            android:layout_width="220dp" /> 
        <!-- 設置掃碼框--> 
        <ImageView 
            android:layout_width="300dp" 
            android:layout_height="300dp" 
            android:layout_centerInParent="true" 
            android:layout_centerHorizontal="true" 
            android:background="@drawable/cloors" /> 
    </RelativeLayout>

    二、經過Customized view實現相機掃碼功能。
    (1)建立Remote View,並加載到Activity佈局。
    (2)對Remote View設置結果回調監聽,獲取掃碼結果對象HMS Scan。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        …
        //識別結果回調事件訂閱 
        remoteView.setOnResultCallback(new OnResultCallback() { 
            @Override 
            public void onResult(HmsScan[] result) { 
                //獲取到掃碼結果HmsScan
                showResult(result); 
            } 
        });
    }

    結束語

      華爲Scan kit依託華爲計算機視覺領域強大能力,支持遠距離碼、小型碼的檢測和自動放大,有效處理反光、遮擋、污損、模糊等複雜掃碼場景,支持Android和iOS系統集成,幫助開發者快速構建關聯服務,提高用戶掃碼體驗和成功率。

      Scan Kit的示例代碼已在Github開源:https://github.com/HMS-Core/h...

    更詳細的開發指南請參考華爲開發者聯盟官網

    https://developer.huawei.com/...
    欲瞭解更多詳情,請參閱:

    華爲開發者聯盟官網:https://developer.huawei.com/consumer/cn/hms

    獲取開發指導文檔:https://developer.huawei.com/consumer/cn/doc/development

    參與開發者討論請到Reddit社區:https://www.reddit.com/r/HMSCore/

    下載demo和示例代碼請到Github:https://github.com/HMS-Core

    解決集成問題請到Stack Overflow:https://stackoverflow.com/questions/tagged/huawei-mobile-services?tab=Newest


    原文連接:https://developer.huawei.com/...做者:say hi

    相關文章
    相關標籤/搜索