前言
在前面的文章中,我們向大家介紹了HMS Scan Kit 的快速集成方法以及HMS Scan Kit和其他開源掃碼工具的競爭力對比分析,如果沒有看到也沒關系,文章下方的往期鏈接中有文章入口。我們現在已經習慣了掃碼,掃碼支付,掃碼關注社交賬號,掃碼了解商品信息,掃碼購物等等。今天就給大家介紹一下掃碼購的開發流程。
場景
在購物類APP中,通過掃描二維碼的入口,掃描商品的二維碼,直接顯示商品信息和購買鏈接,方便客戶選購商品。
整體方案
開發前准備
打開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" />
掃碼購物代碼開發關鍵步驟
主要有兩個功能,一個是添加產品,一個是查詢產品,通過掃碼+拍照綁定一組產品,保存后即可通過掃描
動態權限申請
private static final int PERMISSION_REQUESTS = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
// Checking camera permission
if (!allPermissionsGranted()) {
getRuntimePermissions();
}
}
啟動添加產品頁面
通過按鈕add product 觸發添加商品頁面
public void addProduct(View view) {
Intent intent = new Intent(MainActivity.this, AddProductActivity.class);
startActivityForResult(intent, REQUEST_ADD_PRODUCT);
}
進行掃碼,錄入產品條形碼信息
調用defaultview進行掃碼
private void scanBarcode(int requestCode) {
HmsScanAnalyzerOptions options = new HmsScanAnalyzerOptions.Creator().setHmsScanTypes(HmsScan.ALL_SCAN_TYPE).create();
ScanUtil.startScan(this, requestCode, options);
}
回調函數中保存掃碼的結果
@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)) {
……
}
}
掃碼查詢商品
掃碼查詢的方法也類似,直接在主頁面進行即可,在回調函數中對結果進行展示
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 ,掃面食品二維碼,如果該商品已經被錄入系統,就會返回對應商品信息。
往期鏈接:手把手教你如何快速構建應用內消息推送與運營能力
原文鏈接:https://developer.huawei.com/consumer/cn/forum/topicview?tid=0201282395801440275&fid=18
原作者:littlewhite