【HarmonyOS NEXT】一键扫码功能
前言
鸿蒙在api10之后,对系统api的基础上,封装了较为复杂功能的开发工具包,统一称之为Kit。这些Kit根据功能定义的不同,划分为不同的种类Kit。如下图所示:
其实可以理解为集成在系统中的SDK。
这些Kit为我们应用开发提升了极大地效率。很多简单的功能,如果不需要太深的定制化需求,直接调用kit提供的API就可以实现,在android或者ios上需要很多代码才能实现的功能效果。
扫码Kit
鸿蒙提供了扫码Kit, ScanKit。它有两种集成方式,定制化的自定义扫码 和 界面风格与系统一致的一键扫码。
今天为大家讲解一键扫码的使用。
使用一键扫码,不需要单独申请相机权限,因为会直接跳转到系统内置的扫码界面。扫码结果通过回调,应用在回调中处理扫码解析的值。该调用是鸿蒙系统内安全访问级别。会在扫码界面上提示用户。
目前一键扫码的功能已经完全可以满足扫码相关的需求。例如手电筒,设备设备光暗识别。扫码动画。跳转相册选择二维码识别。
并且除了二维码,也支持条码的识别,功能十分强大。并且集成方式异常简单,不超过十行代码即可实现扫码功能。
当然二维码数据解析的处理,需要三方应用根据自己的业务进行处理。
DEMO效果图:
代码示例:
import { scanBarcode, scanCore } from '@kit.ScanKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { promptAction } from '@kit.ArkUI';
struct Index {
private TAG: string = "Index";
private onToEasyScan = () => {
let options: scanBarcode.ScanOptions = {
scanTypes: [scanCore.ScanType.ALL],
enableMultiMode: true,
enableAlbum: true
};
scanBarcode.startScanForResult(getContext(this), options).then((result: scanBarcode.ScanResult) => {
// 扫码解析成功,二维码数据
console.info(this.TAG, " result: " + JSON.stringify(result));
promptAction.showToast({
message: result.originalValue
});
}).catch((error: BusinessError) => {
// 扫码解析失败
console.info(this.TAG, " error: " + JSON.stringify(error));
});
}
build() {
RelativeContainer() {
Text("跳转一键扫码")
.id('HelloWorld')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
.onClick(this.onToEasyScan)
}
.height('100%')
.width('100%')
}
}