分享一個小案例,用HMS Scankit做一個安卓掃碼購小應用

前言

隨著消費升級,零售業(yè)逐漸邁入新的發(fā)展階段,“新零售”現(xiàn)象:消費者在貨架前掃描小程序二維碼,一邊逛一邊掃描條形碼下單,等選好要買的東西,直接拿出手機,通過“掃碼購”專用通道快速結賬即可離開門店,根本不需要排長隊買單。整個過程行云流水,如果只買一件商品,最快不到2分鐘即可實現(xiàn)一次愉快的購物。今天就給大家介紹一下掃碼購的開發(fā)流程。

場景

在購物類APP中,通過掃描二維碼的入口,掃描商品的二維碼,直接顯示商品信息和購買鏈接,方便客戶選購商品。


整體方案

開發(fā)前準備

打開AndroidStudio項目級build.gradle文件


在allprojects ->repositories里面配置HMS SDK的maven倉地址

allprojects { 
    repositories { 
        google() 
        jcenter() 
        maven {url 'http://developer.huawei.com/repo/'} 
    } 
 }

在buildscript->repositories里面配置HMS SDK的maven倉地址

buildscript { 
    repositories { 
        google() 
        jcenter() 
        maven {url 'http://developer.huawei.com/repo/'} 
    } 
 }

添加編譯依賴

打開應用級的build.gradle文件



集成SDK

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

指定權限和特性

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

由于使用集成簡單的defaultview,所以在AndroidManifest.xml清單文件中對掃碼頁面進行聲明

<activity android:name="com.huawei.hms.hmsscankit.ScanKitActivity" />

掃碼購物代碼開發(fā)關鍵步驟

主要有兩個功能,一個是添加產(chǎn)品,一個是查詢產(chǎn)品,通過掃碼+拍照綁定一組產(chǎn)品,保存后即可通過掃描

動態(tài)權限申請

private static final int PERMISSION_REQUESTS = 1;
@Override 
public void onCreate(Bundle savedInstanceState) { 
    // Checking camera permission   
   if (!allPermissionsGranted()) {
       getRuntimePermissions();
   }
}

啟動添加產(chǎn)品頁面

通過按鈕add product 觸發(fā)添加商品頁面

public void addProduct(View view) {
        Intent intent = new Intent(MainActivity.this, AddProductActivity.class);
        startActivityForResult(intent, REQUEST_ADD_PRODUCT);
    }

進行掃碼,錄入產(chǎn)品條形碼信息

調用defaultview進行掃碼

private void scanBarcode(int requestCode) {
        HmsScanAnalyzerOptions options = new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.ALL_SCAN_TYPE).create();
        ScanUtil.startScan(this, requestCode, options);
    }

回調函數(shù)中保存掃碼的結果

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (data == null) {
            return;
        }
        if ((requestCode == this.REQUEST_CODE_SCAN_ALL)
                && (resultCode == Activity.RESULT_OK)) {
            HmsScan obj = data.getParcelableExtra(ScanUtil.RESULT);
            if (obj != null && obj.getOriginalValue() != null) {
                this.barcode = obj.getOriginalValue();
            }
 
        } else if ((requestCode == this.REQUEST_TAKE_PHOTO)
                && (resultCode == Activity.RESULT_OK)) {
            ……
        }
    }

掃碼查詢商品

掃碼查詢的方法也類似,直接在主頁面進行即可,在回調函數(shù)中對結果進行展示

public void queryProduct(View view) {
        HmsScanAnalyzerOptions options = new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.ALL_SCAN_TYPE).create();
        ScanUtil.startScan(this, REQUEST_QUERY_PRODUCT, options);
}
 
@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (data == null) {
            return;
        }
        if ((requestCode == this.REQUEST_ADD_PRODUCT) && (resultCode == Activity.RESULT_OK)) {
            barcodeToProduct.put(data.getStringExtra(Constant.BARCODE_VALUE), data.getStringExtra(Constant.IMAGE_PATH_VALUE));
        } else if ((requestCode == this.REQUEST_QUERY_PRODUCT) && (resultCode == Activity.RESULT_OK)) {
            HmsScan obj = data.getParcelableExtra(ScanUtil.RESULT);
            String path = "";
            if (obj != null && obj.getOriginalValue() != null) {
                path = barcodeToProduct.get(obj.getOriginalValue());
            }
            if (path != null && !path.equals("")) {
                loadCameraImage(path);
                showPictures();
            }
        }
    }

Demo效果

首先使用demo中的add product,錄入商品的二維碼信息,并拍照記錄,之后使用query product ,掃面食品二維碼,如果該商品已經(jīng)被錄入系統(tǒng),就會返回對應商品信息。


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容