先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7
深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新HarmonyOS鸿蒙全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
如果你需要这些资料,可以添加V获取:vip204888 (备注鸿蒙)
正文
AUTH_TYPE_BIOMETRIC_FINGERPRINT_ONLY指纹识别,AUTH_TYPE_BIOMETRIC_FACE_ONLY脸部识别以及AUTH_TYPE_BIOMETRIC_ALL指纹和面部。
● BiometricAuthentication.SecureLevel验证级别,3D人脸识别支持S3及以下级别的验证;2D人脸识别支持S2及以下级别的验证
由于人脸识别是耗时操作,所以这里新起了线程去做认证,代码示例如下:
/**
- 新建线程进行认证,避免阻塞其他任务
*/
private Runnable runnable = new Runnable() {
private void initHandler() {
runner = EventRunner.getMainEventRunner();
if (runner == null) {
return;
}
myEventHandle = new MyEventHandle(runner);
}
@Override
public void run() {
// 初始化myEventHandle
initHandler();
// 开始认证
startAuth();
}
};
开始人脸识别,代码示例如下:
private void startAuth() {
// retExcAuth 0认证成功 1:比对失败 2:取消认证 3:认证超时 4:打开相机失败
// 5:busy,可能上一个认证没有结束 6:入参错误 7:人脸认证锁定(达到错误认证次数了)
// 8:没有录入人脸 100:其他错误。
int retExcAuth = mBiometricAuthentication.execAuthenticationAction(
BiometricAuthentication.AuthType.AUTH_TYPE_BIOMETRIC_FACE_ONLY,
BiometricAuthentication.SecureLevel.SECURE_LEVEL_S2,
true, false, null);
// 将认证结果发给主线程处理
myEventHandler.sendEvent(retExcAuth);
}
由于我们在线程中执行的人脸识别操作,需要通过EventHandler将识别结果发送到主线程中,并将识别结果显示在页面中,代码示例如下:
/**
- 事件分发器
*/
private class MyEventHandle extends EventHandler {
MyEventHandle(EventRunner runner) throws IllegalArgumentException {
super(runner);
}
@Override
protected void processEvent(InnerEvent event) {
super.processEvent(event);
int eventId = event.eventId;
getAndSetText(ResourceTable.Id_text_status, eventId, true);
}
}
取消人脸识别
点击取消人脸识别Button,触发取消人脸识别操作,代码示例如下:
private void createCancelBtn() {
// 创建点击事件
Component component = findComponentById(ResourceTable.Id_button_cancel);
// 创建按钮
Button cancelBtn = null;
if (component != null && component instanceof Button) {
cancelBtn = (Button) component;
cancelBtn.setClickedListener(view -> {
if (mBiometricAuthentication != null) {
// 调用取消接口
int result = mBiometricAuthentication.cancelAuthenticationAction();
LogUtils.info(“createCancelBtn:”, result + “”);
}
});
}
}
页面跳转
人脸识别成功后,跳转到模拟相机页面,代码示例如下:
private void toAuthAfterPage() {
Intent secondIntent = new Intent();
// 指定待启动FA的bundleName和abilityName
Operation operation = new Intent.OperationBuilder()
.withDeviceId(“”)
.withBundleName(getBundleName())
.withAbilityName(OpenCamera.class.getName())
.build();
secondIntent.setOperation(operation);
// startAbility接口实现启动另一个页面
startAbility(secondIntent);
}
7. 相机相关业务逻辑
在模拟相机页面(ability_open_camera.xml)中,包含打开相机和切换前后置摄像头的功能,我们下面将逐一介绍。
初始化SurfaceProvider
用户授权后,开始初始化SurfaceProvider,代码示例如下:
private void initSurface() {
surfaceProvider = new SurfaceProvider(this);
DirectionalLayout.LayoutConfig params = new DirectionalLayout.LayoutConfig(
ComponentContainer.LayoutConfig.MATCH_PARENT, ComponentContainer.LayoutConfig.MATCH_PARENT);
surfaceProvider.setLayoutConfig(params);
surfaceProvider.pinToZTop(false);
// 添加SurfaceCallBack回调
surfaceProvider.getSurfaceOps().get().addCallback(new SurfaceCallBack());
// 将SurfaceProvider加入到布局中
Component component = findComponentById(ResourceTable.Id_surface_container);
if (component instanceof ComponentContainer) {
((ComponentContainer) component).addComponent(surfaceProvider);
}
}
实现SurfaceOps.Callback回调,当Surface创建时,执行打开相机的操作,代码示例如下:
/**
- SurfaceCallBack,Surface回调
*/
class SurfaceCallBack implements SurfaceOps.Callback {
@Override
public void surfaceCreated(SurfaceOps callbackSurfaceOps) {
if (callbackSurfaceOps != null) {
callbackSurfaceOps.setFixedSize(SCREEN_HEIGHT, SCREEN_WIDTH);
}
openCamera();
}
@Override
public void surfaceChanged(SurfaceOps callbackSurfaceOps, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceOps callbackSurfaceOps) {
}
}
打开相机
创