一、注册界面、登录界面及人脸识别与指纹识别的嵌入

1.注册界面的构建
用户注册:收集用户名、密码和确认密码

输入验证:非空检查、密码一致性验证

数据库操作:将新用户信息存储到本地数据库

导航:提供返回登录页面的选项

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_register)

        userDatabase = UserDatabase(this)
        
        // 初始化视图
        etUsername = findViewById(R.id.etUsername)
        etPassword = findViewById(R.id.etPassword)
        etConfirmPassword = findViewById(R.id.etConfirmPassword)
        btnRegister = findViewById(R.id.btnRegister)
        tvBackToLogin = findViewById(R.id.tvBackToLogin)

        btnRegister.setOnClickListener {
            val username = etUsername.text.toString()
            val password = etPassword.text.toString()
            val confirmPassword = etConfirmPassword.text.toString()

            if (username.isEmpty() || password.isEmpty() || confirmPassword.isEmpty()) {
                Toast.makeText(this, "请填写所有字段", Toast.LENGTH_SHORT).show()
                return@setOnClickListener
            }

            if (password != confirmPassword) {
                Toast.makeText(this, "两次输入的密码不一致", Toast.LENGTH_SHORT).show()
                return@setOnClickListener
            }

            if (userDatabase.addUser(username, password)) {
                Toast.makeText(this, "注册成功", Toast.LENGTH_SHORT).show()
                finish()
            } else {
                Toast.makeText(this, "注册失败,用户名可能已存在", Toast.LENGTH_SHORT).show()
            }
        }
        
        tvBackToLogin.setOnClickListener {
            finish() // 返回登录界面
        }
    }

实现界面如下:

 

2.登录界面的构建:验证用户名和密码,提供跳转注册页面的选项,登录成功后进入主界面。

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_login)

        userDatabase = UserDatabase(this)
        
        // 初始化视图
        etUsername = findViewById(R.id.etUsername)
        etPassword = findViewById(R.id.etPassword)
        btnLogin = findViewById(R.id.btnLogin)
        tvRegister = findViewById(R.id.tvRegister)

        btnLogin.setOnClickListener {
            val username = etUsername.text.toString()
            val password = etPassword.text.toString()

            if (username.isEmpty() || password.isEmpty()) {
                Toast.makeText(this, "请输入用户名和密码", Toast.LENGTH_SHORT).show()
                return@setOnClickListener
            }

            if (userDatabase.checkUser(username, password)) {
                Toast.makeText(this, "登录成功", Toast.LENGTH_SHORT).show()
                // 跳转到主界面
                val intent = Intent(this, MainActivity::class.java)
                startActivity(intent)
                finish() // 结束当前Activity,防止用户按返回键回到登录界面
            } else {
                Toast.makeText(this, "用户名或密码错误", Toast.LENGTH_SHORT).show()
            }
        }

        tvRegister.setOnClickListener {
            startActivity(Intent(this, RegisterActivity::class.java))
        }
    }

实现界面如下:

 

3.人脸识别与指纹识别的集成

(1)权限声明

<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<uses-permission android:name="android.permission.USE_FINGERPRINT" /> <!-- 仅API 28以下需要 -->

(2) 调用Android Biometric API进行人脸识别与指纹识别

val authenticators = when (preferredMethod) {
    "FACE" -> BiometricManager.Authenticators.BIOMETRIC_STRONG
    "FINGERPRINT" -> BiometricManager.Authenticators.BIOMETRIC_WEAK
    else -> BiometricManager.Authenticators.BIOMETRIC_STRONG
}

promptInfo.setAllowedAuthenticators(authenticators)

(3)使用Android Keystore系统来保护数据

val keyStore = KeyStore.getInstance("AndroidKeyStore")
keyStore.load(null)
val keyGenerator = KeyGenerator.getInstance(
    KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore")
val keyGenSpec = KeyGenParameterSpec.Builder(
    "biometric_key",
    KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT)
    .setBlockModes(KeyProperties.BLOCK_MODE_CBC)
    .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7)
    .setUserAuthenticationRequired(true)
    .setUserAuthenticationParameters(0, KeyProperties.AUTH_BIOMETRIC_STRONG)
    .build()
keyGenerator.init(keyGenSpec)
keyGenerator.generateKey()

实现界面如下:

 

二、初步打包成apk,局域网内DeepSeek故事生成,SD漫画生成,跨设备数据加密传输初步实现

1.项目初步打包(未完成全部功能,仅用于测试)成apk,手机安装测试

gradle build对项目进行打包:

2.安装到手机进行测试。一位同学的电脑充当服务器,测试数据传输与漫画生成是否正常,测试如下,成功完成DeepSeek故事生成->故事结构化,拆解为四个分镜描述- >将故事以List<prompt>格式通过WebSocket通信传输到SD服务器->SD进行处理生成图片->将图片封装成JSON格式传输到手机

数据传输成功:

图片生成成功:

图片封装成JSON格式并传回手机成功:

 

漫画初步生成如下(后续将跟进训练与优化):

三、部分功能前端页面优化

1.增强型空状态设计与消息气泡组件重构

 2.在变量上添加图标变量,根据不同的 title 为每个标签设置不同的图标

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐