前言
隨著消費(fèi)升級封断,零售業(yè)逐漸邁入新的發(fā)展階段,“新零售”現(xiàn)象:消費(fèi)者在貨架前掃描小程序二維碼舶担,一邊逛一邊掃描條形碼下單坡疼,等選好要買的東西,直接拿出手機(jī)衣陶,通過“掃碼購”專用通道快速結(jié)賬即可離開門店柄瑰,根本不需要排長隊買單。整個過程行云流水剪况,如果只買一件商品教沾,最快不到2分鐘即可實現(xiàn)一次愉快的購物。今天就給大家介紹一下掃碼購的開發(fā)流程译断。
場景
在購物類APP中授翻,通過掃描二維碼的入口,掃描商品的二維碼孙咪,直接顯示商品信息和購買鏈接堪唐,方便客戶選購商品。
整體方案
開發(fā)前準(zhǔn)備
打開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/'}
}
}
添加編譯依賴
打開應(yīng)用級的build.gradle文件
集成SDK
dependencies{
implementation 'com.huawei.hms:scan:1.1.3.301'
}
指定權(quán)限和特性
<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清單文件中對掃碼頁面進(jìn)行聲明
<activity android:name="com.huawei.hms.hmsscankit.ScanKitActivity" />
掃碼購物代碼開發(fā)關(guān)鍵步驟
主要有兩個功能淮菠,一個是添加產(chǎn)品,一個是查詢產(chǎn)品杨蛋,通過掃碼+拍照綁定一組產(chǎn)品兜材,保存后即可通過掃描
動態(tài)權(quán)限申請
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);
}
進(jìn)行掃碼,錄入產(chǎn)品條形碼信息
調(diào)用defaultview進(jìn)行掃碼
private void scanBarcode(int requestCode) {
HmsScanAnalyzerOptions options = new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.ALL_SCAN_TYPE).create();
ScanUtil.startScan(this, requestCode, options);
}
回調(diào)函數(shù)中保存掃碼的結(jié)果
@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)) {
……
}
}
掃碼查詢商品
掃碼查詢的方法也類似逞力,直接在主頁面進(jìn)行即可曙寡,在回調(diào)函數(shù)中對結(jié)果進(jìn)行展示
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)户侥,就會返回對應(yīng)商品信息。